@gen3/core 0.12.18 → 0.12.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/constants.ts","../../src/features/fence/utils.ts","../../src/features/fence/fetchFence.ts","../../src/features/user/userSliceRTK.ts","../../src/features/gen3/gen3Api.ts","../../src/hooks.ts","../../src/features/user/userSlice.ts","../../src/features/gen3Apps/gen3AppRegistry.ts","../../src/features/gen3Apps/gen3AppsSlice.ts","../../src/features/drsResolver/drsHostnameSlice.ts","../../src/features/modals/modalsSlice.ts","../../src/features/workspace/types.ts","../../src/utils/time.ts","../../src/features/workspace/workspaceSlice.ts","../../src/features/cart/cartSlice.ts","../../src/features/cart/cartSelectors.ts","../../src/features/cart/index.ts","../../src/features/user/externalLoginsSlice.ts","../../src/features/drsResolver/resolvers/dataGUIDSDotOrg.ts","../../src/features/drsResolver/resolvers/cachedDRSResolver.ts","../../src/features/drsResolver/utils.ts","../../src/utils/ts-utils.ts","../../src/utils/url.ts","../../src/utils/fetch.ts","../../src/utils/extractvalues.ts","../../src/utils/conversions.ts","../../src/features/user/utils.ts","../../src/features/user/hooks.ts","../../src/features/guppy/guppyApi.ts","../../src/features/filters/types.ts","../../src/features/filters/filters.ts","../../src/features/filters/utils.ts","../../src/features/cohort/utils.ts","../../src/features/cohort/cohortManagerSlice.ts","../../src/features/cohort/filterExpandSlice.ts","../../src/features/cohort/filterCombineModeSlice.ts","../../src/features/cohort/sharedFiltersSlice.ts","../../src/features/cohort/reducers.ts","../../src/reducers.ts","../../src/features/guppy/conversion.ts","../../src/types/types.ts","../../src/features/guppy/utils.ts","../../src/features/guppy/processing.ts","../../src/features/guppy/queryGenerators.ts","../../src/features/guppy/range.ts","../../src/features/cohort/cohortManagerSelector.ts","../../src/features/filters/nestedFilters.ts","../../src/features/guppy/guppySlice.ts","../../src/listeners.ts","../../src/storage-persist.ts","../../src/features/authz/fetchAuthz.ts","../../src/store.ts","../../src/provider.tsx","../../src/dataAccess.ts","../../src/features/aiSearch/aiSearchSlice.ts","../../src/features/authz/authzMappingSlice.ts","../../src/features/cohort/storage/CohortStorage.ts","../../src/features/dataLibrary/types.ts","../../src/features/dataLibrary/utils.ts","../../src/features/dataLibrary/storage/LocalStorageService.ts","../../src/features/dataLibrary/storage/APIStorageService.ts","../../src/features/dataLibrary/storage/CachedAPIStorageService.ts","../../src/features/dataLibrary/storage/DataLibraryStorageService.ts","../../src/features/dataLibrary/useDataLibrary.ts","../../src/features/fence/fenceApi.ts","../../src/features/fence/credentialsApi.ts","../../src/features/fence/jwtApi.ts","../../src/features/gen3Apps/constants.ts","../../src/features/gen3Apps/Gen3App.tsx","../../src/features/gen3Apps/Gen3AppRTKQ.ts","../../src/features/graphQL/graphQLSlice.ts","../../src/features/guppy/guppyDownloadSlice.ts","../../src/features/manifest/manifestApi.ts","../../src/features/metadata/metadataSlice.ts","../../src/features/metadata/utils.ts","../../src/features/requestor/remoteSupport/types.ts","../../src/utils/logger.ts","../../src/features/requestor/remoteSupport/registeredRemoteSupportServices.ts","../../src/features/requestor/remoteSupport/zenDesk.ts","../../src/features/requestor/remoteSupport/registerDefaultRemoteSupport.ts","../../src/features/requestor/requestorSlice.ts","../../src/features/sower/sowerApi.ts","../../src/features/submission/authMappingUtils.ts","../../src/features/submission/submissionApi.ts","../../src/features/workspace/workspaceApi.ts","../../src/features/workspace/utils.ts","../../src/features/config/registry.ts"],"sourcesContent":["export const GEN3_COMMONS_NAME =\n process.env.NEXT_PUBLIC_GEN3_COMMONS_NAME || 'gen3';\nexport const GEN3_API = process.env.NEXT_PUBLIC_GEN3_API || '';\nexport const GEN3_DOMAIN = process.env.NEXT_PUBLIC_GEN3_DOMAIN || '';\nexport const GUID_PREFIX_PATTERN = /^dg.[a-zA-Z0-9]+\\//;\n\n/**\n * Service Specific Constants\n */\nexport const GEN3_GUPPY_API =\n process.env.NEXT_PUBLIC_GEN3_GUPPY_API || `${GEN3_API}/guppy`;\nexport const GEN3_MDS_API =\n process.env.NEXT_PUBLIC_GEN3_MDS_API || `${GEN3_API}/mds`;\nexport const GEN3_DOWNLOADS_ENDPOINT =\n process.env.NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT || 'downloads';\nexport const GEN3_FENCE_API =\n process.env.NEXT_PUBLIC_GEN3_FENCE_API || `${GEN3_API}/user`;\nexport const GEN3_FENCE_SERVICE =\n process.env.GEN3_FENCE_SERVICE || 'http://fence-service';\nexport const GEN3_AI_SEARCH_API =\n process.env.NEXT_PUBLIC_GEN3_AI_SEARCH_API || `${GEN3_API}/ai-search`;\nexport const GEN3_AUTHZ_API =\n process.env.NEXT_PUBLIC_GEN3_AUTHZ_API || `${GEN3_API}/authz`;\nexport const GEN3_AUTHZ_SERVICE =\n process.env.GEN3_AUTHZ_SERVICE || 'http://arborist-service';\nexport const GEN3_REDIRECT_URL =\n process.env.NEXT_PUBLIC_GEN3_REDIRECT_URL || GEN3_API;\nexport const GEN3_WORKSPACE_API =\n process.env.NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API ||\n `${GEN3_API}/lw-workspace`;\nexport const GEN3_SUBMISSION_API =\n process.env.NEXT_PUBLIC_GEN3_SUBMISSION_API ||\n `${GEN3_API}/api/v0/submission`;\nexport const GEN3_WTS_API =\n process.env.NEXT_PUBLIC_GEN3_WTS_API || `${GEN3_API}/wts`;\nexport const GEN3_DATA_LIBRARY_API =\n process.env.NEXT_PUBLIC_GEN3_DATA_LIBRARY_API || `${GEN3_API}/library/lists`;\nexport const GEN3_CROSSWALK_API =\n process.env.NEXT_PUBLIC_GEN3_CROSSWALK_API || `${GEN3_API}/mds`;\nexport const GEN3_SOWER_API =\n process.env.NEXT_PUBLIC_GEN3_SOWER_API || `${GEN3_API}/jobs`;\nexport const GEN3_MANIFEST_API =\n process.env.NEXT_PUBLIC_GEN3_MANIFEST_API || `${GEN3_API}/manifests`;\nexport const GEN3_REQUESTOR_API =\n process.env.NEXT_PUBLIC_GEN3_REQUESTOR_API || `${GEN3_API}/requestor`;\n\nexport enum Accessibility {\n ACCESSIBLE = 'accessible',\n UNACCESSIBLE = 'unaccessible',\n ALL = 'all',\n}\n\nexport const FILE_FORMATS = {\n JSON: 'json',\n TSV: 'tsv',\n CSV: 'csv',\n};\n\nexport const FILE_DELIMITERS = {\n tsv: '\\t',\n csv: ',',\n};\n\nexport const CART_LIMIT = 80000;\n","import { FetchError } from './types';\n\nexport const isFetchError = <T>(obj: unknown): obj is FetchError<T> => {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n\n const { url, status, statusText, text } = obj as Partial<FetchError<T>>;\n\n return (\n typeof url === 'string' &&\n typeof status === 'number' &&\n typeof statusText === 'string' &&\n typeof text === 'string'\n );\n};\n\n/**\n * Template for fence error response dict\n * @returns: An error dict response from a RESTFUL API request\n */\nexport const buildFetchError = async <T>(\n res: Response,\n request?: T,\n): Promise<FetchError<T>> => {\n return {\n url: res.url,\n status: res.status,\n statusText: res.statusText,\n text: await res.text(),\n request: request,\n };\n};\n","import { type FetchRequest, type Gen3FenceResponse } from './types';\nimport { GEN3_FENCE_API, GEN3_FENCE_SERVICE } from '../../constants';\nimport { buildFetchError } from './utils';\n\n/**\n * Performs an asynchronous HTTP request to the Gen3 Fence API and processes the response.\n *\n * @template T The expected type of the response data.\n * @param {FetchRequest} options The options for the fetch request.\n * @param {string} options.endpoint The API endpoint to which the request will be sent.\n * @param {Record<string, string>} options.headers An object representing the HTTP headers to include in the request.\n * @param {Record<string, any>} [options.body={}] The request body to send with the fetch, used if the HTTP method is POST.\n * @param {string} [options.method='GET'] The HTTP method for the request (e.g., 'GET', 'POST').\n * @param {boolean} [options.isJSON=true] Determines if the response should be parsed as JSON or returned as plain text.\n * @param useService { boolean } Uses fence_service instead of public fence API\n * @returns {Promise<Gen3FenceResponse<T>>} A promise that resolves to the parsed data and response status\n * or rejects with an error if the request fails.\n * @throws {Error} Throws an error if the fetch request fails or the response is not successful.\n */\nexport const fetchFence = async <T>(\n { endpoint, headers, body = {}, method = 'GET', isJSON = true }: FetchRequest,\n useService: boolean = false,\n): Promise<Gen3FenceResponse<T>> => {\n let url = `${GEN3_FENCE_API}${endpoint}`;\n if (useService) {\n url = `${GEN3_FENCE_SERVICE}/${endpoint}`;\n }\n\n const res = await fetch(url, {\n method: method,\n credentials: 'include',\n headers: {\n // Ensure Content-Type is set for JSON POSTs, but allow overrides via 'headers'\n ...(method === 'POST' ? { 'Content-Type': 'application/json' } : {}),\n ...headers,\n },\n body: 'POST' === method ? JSON.stringify(body) : null,\n // REMOVED: next: { revalidate: 360 } - Auth requests should not be cached by default\n });\n\n if (res.ok)\n return {\n data: isJSON ? await res.json() : await res.text(),\n status: res.status,\n };\n throw await buildFetchError(res, {\n endpoint,\n method,\n headers,\n body,\n });\n};\n","import { createSelector } from '@reduxjs/toolkit';\nimport { type Gen3FenceResponse } from '../fence/types';\nimport { Gen3User, LoginStatus } from './types';\nimport { CoreState } from '../../reducers';\nimport { getCookie } from 'cookies-next';\nimport { QueryStatus } from '@reduxjs/toolkit/query';\nimport { createApi } from '@reduxjs/toolkit/query/react';\nimport { GEN3_API } from '../../constants';\nimport { fetchFence } from '../fence/fetchFence';\n\nexport interface CSRFToken {\n readonly csrfToken: string;\n}\n\nexport interface UserAuthResponse {\n readonly data: Gen3User;\n readonly loginStatus: LoginStatus;\n}\n\nexport const userAuthApi = createApi({\n reducerPath: 'userAuthApi',\n refetchOnMountOrArgChange: 1800,\n refetchOnReconnect: true,\n baseQuery: async ({ endpoint }, { getState }) => {\n let results;\n const csrfToken = selectCSRFToken(getState() as CoreState);\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n accessToken = getCookie('credentials_token');\n }\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n credentials: 'include',\n };\n\n try {\n results = await fetchFence({ endpoint, headers });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_e: unknown) {\n /*\n Because an \"error\" response is valid for the auth requests we don't want to\n put the request in an error state, or it will attempt the request over and over again\n */\n return { data: {} };\n }\n\n return { data: results };\n },\n endpoints: (builder) => ({\n fetchUserDetails: builder.query<UserAuthResponse, void>({\n query: () => ({ endpoint: '/user' }),\n transformResponse(response: Gen3FenceResponse<Gen3User>) {\n return {\n data: response.data,\n // TODO: check if this is the correct status code\n\n loginStatus:\n response.status === 200 && response.data?.username\n ? 'authenticated'\n : 'unauthenticated',\n };\n },\n }),\n getCSRF: builder.query<CSRFToken, void>({\n queryFn: async () => {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n };\n try {\n const res = await fetch(`${GEN3_API}/_status`, {\n headers: headers,\n });\n\n if (res.ok) {\n const jsonData = await res.json();\n const token = jsonData?.csrf ?? '';\n return {\n data: { csrfToken: token },\n };\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n return {\n error: error.message,\n };\n } else {\n return {\n error: 'Unknown Error',\n };\n }\n }\n return {\n error: 'Unknown Error',\n };\n },\n }),\n }),\n});\n\nconst EMPTY_USER: Gen3User = {\n username: undefined,\n};\n\nexport const {\n useFetchUserDetailsQuery,\n useLazyFetchUserDetailsQuery,\n useGetCSRFQuery,\n useLazyGetCSRFQuery,\n} = userAuthApi;\nexport const userAuthApiMiddleware = userAuthApi.middleware;\nexport const userAuthApiReducerPath = userAuthApi.reducerPath;\nexport const userAuthApiReducer = userAuthApi.reducer;\n\nexport const selectUserDetailsFromState =\n userAuthApi.endpoints.fetchUserDetails.select();\n\nexport const selectUserDetails = createSelector(\n selectUserDetailsFromState,\n (userDetails) => userDetails?.data?.data ?? EMPTY_USER,\n);\n\nexport const selectUserAuthStatus = createSelector(\n selectUserDetailsFromState,\n (userLoginState) =>\n userLoginState.status === QueryStatus.pending\n ? ('pending' as LoginStatus)\n : userLoginState.status === QueryStatus.uninitialized\n ? ('not present' as LoginStatus)\n : (userLoginState?.data?.loginStatus ??\n ('unauthenticated' as LoginStatus)),\n);\n\nexport const selectCSRFTokenData = userAuthApi.endpoints.getCSRF.select();\n\nconst passThroughTheState = (state: CoreState) => state.userAuthApi;\n\nexport const selectCSRFToken = createSelector(\n [selectCSRFTokenData, passThroughTheState],\n (state) => state?.data?.csrfToken,\n);\n\nexport const selectHeadersWithCSRFToken = createSelector(\n [selectCSRFToken, passThroughTheState],\n (csrfToken) => ({\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'X-CSRF-Token': csrfToken }),\n }),\n);\n","import { Middleware, Reducer } from '@reduxjs/toolkit';\nimport { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\nimport { GEN3_API } from '../../constants';\nimport { CoreState } from '../../reducers';\nimport { selectCSRFToken } from '../user/userSliceRTK';\nimport { getCookie } from 'cookies-next';\n\n/**\n * Creates a base class core API for building other API endpoints on top of.\n * @param reducerPath - The root key name that the other slices will be derived from\n * @param baseQuery: - The template query which the slices will addon to\n * @param endpoints - Base API endpoints that should exist in every slice\n * @returns: The generated base API\n */\nexport const gen3Api = createApi({\n reducerPath: 'gen3Services',\n baseQuery: fetchBaseQuery({\n baseUrl: `${GEN3_API}`,\n prepareHeaders: (headers, { getState }) => {\n const csrfToken = selectCSRFToken(getState() as CoreState);\n headers.set('Content-Type', 'application/json');\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n const accessToken = getCookie('credentials_token');\n if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);\n }\n if (csrfToken) headers.set('X-CSRF-Token', csrfToken);\n\n return headers;\n },\n validateStatus: (response) => {\n return response.status >= 200 && response.status < 300;\n },\n }),\n endpoints: () => ({}),\n});\n\nexport const gen3ServicesReducer: Reducer = gen3Api.reducer as Reducer;\nexport const gen3ServicesReducerMiddleware = gen3Api.middleware as Middleware;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { CoreDispatch } from './store';\nimport { CoreState } from './reducers';\n\n// From here down is react-related code. If we wanted to create a UI-agnotic core,\n// we could need to move the following code and the provider into a new workspace,\n// such as core-react.\n\n/**\n * The initial context is never used in practice. A little casting voodoo to satisfy TS.\n *\n * Note: Should the action type be AnyAction (from redux) or PayloadAction (from redux-toolkit)?\n * If we are creating all of our actions through RTK, then PayloadAction might be the\n * correct opinionated type.\n */\n\nexport const useCoreSelector = useSelector.withTypes<CoreState>();\nexport const useCoreDispatch = useDispatch.withTypes<CoreDispatch>();\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport { fetchFence } from '../fence/fetchFence';\nimport { type Gen3FenceResponse } from '../fence/types';\nimport { CoreDispatch } from '../../store';\nimport { CoreState } from '../../reducers';\nimport { CoreDataSelectorResponse, DataStatus } from '../../dataAccess';\nimport { useCoreDispatch, useCoreSelector } from '../../hooks';\nimport { useEffect } from 'react';\nimport { Gen3User, LoginStatus } from './types';\nimport { getCookie } from 'cookies-next';\nimport { selectCSRFToken } from './userSliceRTK';\n\nexport interface Gen3UserLoginResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly loginStatus: LoginStatus;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\n/**\n * Creates an async thunk for fetching user permissions details from fence\n * @see https://redux-toolkit.js.org/api/createAsyncThunk\n * @returns: A fence response dict containing user details\n */\nexport const fetchUserState = createAsyncThunk<\n Gen3FenceResponse<Gen3User> | undefined,\n void,\n { dispatch: CoreDispatch; state: CoreState }\n>('fence/user/user', async (_, meta) => {\n // Get an access token from a cookie if in development mode\n const csrfToken = selectCSRFToken(meta.getState());\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n accessToken = getCookie('credentials_token');\n }\n\n return await fetchFence({\n endpoint: '/user',\n method: 'GET',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),\n credentials: 'include',\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n },\n });\n});\n\nexport const isAuthenticated = (loginStatus: LoginStatus): boolean =>\n loginStatus === 'authenticated';\n\nexport const isPending = (loginStatus: LoginStatus): boolean =>\n loginStatus === 'pending';\n\nexport interface Gen3UserState {\n readonly data?: Gen3User;\n readonly status: DataStatus;\n readonly loginStatus: LoginStatus;\n readonly error?: string;\n}\n\nconst initialState: Gen3UserState = {\n status: 'uninitialized',\n loginStatus: 'unauthenticated',\n error: undefined,\n};\n\n/**\n * Wraps a slice on top of fetchUserState async thunk to keep track of\n * query state. authenticated/not-authenticated vs. ejected/fulfilled/pending\n * @returns: status messages wrapped around fetchUserState response dict\n */\nconst slice = createSlice({\n name: 'fence/user',\n initialState,\n reducers: {\n resetUserState: () => initialState,\n },\n extraReducers: (builder) => {\n builder\n .addCase(fetchUserState.fulfilled, (_, action) => {\n const response = action.payload;\n if (response?.status !== 200) {\n return {\n status: 'rejected',\n loginStatus: 'unauthenticated',\n };\n }\n\n return {\n data: { ...response.data },\n status: 'fulfilled',\n loginStatus: 'authenticated',\n };\n })\n .addCase(fetchUserState.pending, () => {\n return { status: 'pending', loginStatus: 'unauthenticated' };\n })\n .addCase(fetchUserState.rejected, () => {\n return { status: 'rejected', loginStatus: 'unauthenticated' };\n });\n },\n});\n\nexport const userReducer = slice.reducer;\n\nexport const { resetUserState } = slice.actions;\n\nexport interface Gen3UserSelectorResponse<\n T,\n> extends CoreDataSelectorResponse<T> {\n readonly loginStatus: LoginStatus;\n}\n\nexport const selectUserData = (\n state: CoreState,\n): Gen3UserSelectorResponse<Gen3User> => {\n return state.user;\n};\n\nexport const selectUser = (state: CoreState): Gen3UserState => state.user;\n\nexport const selectUserLoginStatus = (state: CoreState): LoginStatus =>\n state.user.loginStatus;\n\nexport const useIsUserLoggedIn = (): boolean => {\n return useCoreSelector((state) =>\n isAuthenticated(selectUserLoginStatus(state)),\n );\n};\n\n/**\n * Hook to return get the authenticated state of the user and if logged in,\n * the user's profile and access api.\n * Note that if fetchUserState gets called, the user's session is renewed.\n */\nexport const useUserAuth = (renew = false): Gen3UserLoginResponse<Gen3User> => {\n const coreDispatch = useCoreDispatch();\n const { data, status, loginStatus, error } = useCoreSelector(selectUserData);\n\n useEffect(() => {\n if (status === 'uninitialized' || renew) {\n // TODO: need to determine what other states require dispatch\n coreDispatch(fetchUserState());\n }\n }, [status, coreDispatch, renew]);\n\n return {\n data: data,\n error,\n loginStatus,\n isUninitialized: status === 'uninitialized',\n isFetching: status === 'pending',\n isSuccess: status === 'fulfilled',\n isError: status === 'rejected',\n };\n};\n","/**\n * A registry for the Gen3 Apps.\n */\nexport const REGISTRY: Record<string, React.ReactNode> = {};\n\nexport const registerGen3App = (id: string, gen3App: React.ReactNode): void => {\n REGISTRY[id] = gen3App;\n};\n\nexport const lookupGen3App = (id: string): React.ReactNode => {\n if (id in REGISTRY) return REGISTRY[id];\n else return null;\n};\n\nexport const computeGen3AppId = (name: string, version: string): string => {\n return `${name}@${version}`;\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport React from 'react';\nimport { CoreState } from '../../reducers';\nimport { lookupGen3App } from './gen3AppRegistry';\n\nexport interface Gen3AppsState {\n readonly gen3Apps: Readonly<Record<string, Gen3AppMetadata>>;\n readonly currentAppId?: string;\n}\n\nexport interface Gen3AppMetadata {\n readonly id: string;\n readonly name: string;\n readonly version: string;\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n}\n\nexport type EntityType = 'case' | 'gene' | 'ssm' | 'cnv' | 'file';\n\nconst initialState: Gen3AppsState = {\n gen3Apps: {},\n};\n\nconst slice = createSlice({\n name: 'gen3Apps',\n initialState,\n reducers: {\n addGen3AppMetadata: (state, action: PayloadAction<Gen3AppMetadata>) => {\n const { name, requiredEntityTypes } = action.payload;\n\n state.gen3Apps[name] = {\n ...action.payload,\n // need to turn a ReadonlyArray into a mutable array for immer's WritableDraft\n requiredEntityTypes: [...requiredEntityTypes],\n };\n },\n },\n});\n\nexport const gen3AppReducer = slice.reducer;\n\nexport const { addGen3AppMetadata } = slice.actions;\n\nexport const selectGen3AppIds = (state: CoreState): ReadonlyArray<string> =>\n Object.keys(state.gen3Apps.gen3Apps);\n\nexport const selectAllGen3AppMetadata = (\n state: CoreState,\n): ReadonlyArray<Gen3AppMetadata> => Object.values(state.gen3Apps.gen3Apps);\n\nexport const selectGen3AppMetadataByName = (\n state: CoreState,\n appName: string,\n): Gen3AppMetadata => state.gen3Apps.gen3Apps[appName];\n\nexport const selectGen3AppByName = (appName: string): React.ReactNode =>\n lookupGen3App(appName); // TODO: memoize this selector\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\n\nexport type DRSHostnameMap = Record<string, string>;\n\nconst initialState : Record<string, string> = {};\n\n// TODO: document what this does\nconst slice = createSlice({\n name: 'drsResolver',\n initialState,\n reducers: {\n setDRSHostnames: (_state, action: PayloadAction<DRSHostnameMap>) => {\n return action.payload;\n },\n },\n});\n\nexport const drsHostnamesReducer = slice.reducer;\n\nexport const { setDRSHostnames } = slice.actions;\n\nexport const drsHostnamesSelector = (id:string, state: CoreState) =>\n state.drsHostnames?.[id];\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\n\n/**\n * Defines the modals slice of the Redux store.\n * This slice is used to control the display of standard Gen3 modals.\n * and can be extended to add custom modals by representing them as strings.\n */\nexport enum Modals {\n 'FirstTimeModal' = 'FirstTimeModal',\n 'SessionExpireModal' = 'SessionExpireModal',\n 'NoAccessModal' = 'NoAccessModal',\n 'CreateCredentialsAPIKeyModal' = 'CreateCredentialsAPIKeyModal',\n 'GeneralErrorModal' = 'GeneralErrorModal',\n}\n\n// Type for the current modal in the store\n// This can be a standard Gen3 modal, a custom modal (via string), or null\ntype CurrentModal = Modals | string | null;\n\nexport interface ModalState {\n currentModal: CurrentModal;\n message?: string;\n}\n\nconst initialState: ModalState = {\n currentModal: null,\n};\n\n//Creates a modal slice for tracking showModal and hideModal state.\nconst slice = createSlice({\n name: 'modals',\n initialState,\n reducers: {\n showModal: (\n state: ModalState,\n action: PayloadAction<{ modal: Modals; message?: string }>,\n ) => {\n state.currentModal = action.payload.modal;\n state.message = action.payload.message;\n return state;\n },\n hideModal: (state: ModalState) => {\n state.currentModal = null;\n return state;\n },\n },\n});\n\nexport const modalReducer = slice.reducer;\nexport const { showModal, hideModal } = slice.actions;\n\nexport const selectCurrentModal = (state: CoreState): CurrentModal =>\n state.modals.currentModal;\n\nexport const selectCurrentMessage = (state: CoreState): string | undefined =>\n state.modals.message;\n","export interface PayModel {\n bmh_workspace_id: string;\n workspace_type: string;\n user_id: string;\n account_id: string;\n request_status: string;\n local: boolean;\n region: string;\n ecs: boolean;\n subnet: number;\n 'hard-limit': number;\n 'soft-limit': number;\n 'total-usage': number;\n current_pay_model: boolean;\n}\n\nexport interface WorkspaceId {\n id: string;\n}\n\nexport interface WorkspaceInfo extends WorkspaceId {\n name: string;\n idleTimeLimit: number;\n memoryLimit: string;\n cpuLimit: string;\n}\n\nexport interface WorkspaceInfoResponse {\n id: string;\n name: string;\n 'idle-time-limit': number;\n 'memory-limit': string;\n 'cpu-limit': string;\n}\n\nexport type WorkspaceOptionsResponse = Array<WorkspaceInfoResponse>;\nexport type WorkspaceOptions = Array<WorkspaceInfo>;\n\nexport interface WorkspacePayModelResponse {\n currentPayModel: PayModel;\n allPayModels: PayModel[];\n noPayModel: boolean;\n}\n\n/**\n * Workspace Pod status\n */\nexport enum WorkspaceStatus {\n Launching = 'Launching',\n Running = 'Running',\n Terminating = 'Terminating',\n Stopped = 'Stopped',\n NotFound = 'Not Found',\n Errored = 'Errored',\n StatusError = 'Status Error',\n}\n\n/**\n * requested state of pod, either by user or workspace monitor\n */\nexport enum RequestedWorkspaceStatus {\n Launch = 'Launch',\n Terminate = 'Terminate',\n Unset = 'Unset', // same\n}\n\nexport enum PodConditionType {\n PodScheduled = 'PodScheduled',\n Initialized = 'Initialized',\n ContainersReady = 'ContainersReady',\n PodReadyToStartContainers = 'PodReadyToStartContainers',\n ProxyConnected = 'ProxyConnected',\n Ready = 'Ready',\n}\n\nexport enum PodStatus {\n True = 'True',\n False = 'False',\n Unknown = 'Unknown',\n}\n\nexport interface WorkspaceContainerState {\n name: string;\n ready: boolean;\n state:\n | { running: { startedAt: string } }\n | { waiting: { reason: string } }\n | { terminated: { reason: string } };\n}\n\nexport interface WorkspacePodCondition {\n type: PodConditionType;\n status: PodStatus;\n}\n\nexport interface WorkspaceStatusResponse {\n status: WorkspaceStatus;\n conditions?: Array<WorkspacePodCondition>;\n containerStates?: Array<WorkspaceContainerState>;\n idleTimeLimit?: number;\n lastActivityTime: number;\n workspaceType?: string;\n}\n","// Using the built-in Date object\nexport const getCurrentTimestamp = (): number => {\n return Date.now(); // Returns milliseconds since Unix epoch\n};\n\n// Get a readable timestamp for logging/display\nexport const getFormattedTimestamp = (): string => {\n return new Date().toISOString();\n};\n\n// Compare two timestamps and get difference in milliseconds\nexport const getTimeDifferenceMs = (\n startTime: number,\n endTime: number = Date.now(),\n): number => {\n return endTime - startTime;\n};\n\n// Check if time difference is greater than specified minutes\nexport const isTimeGreaterThan = (\n startTime: number,\n minutes: number,\n): boolean => {\n const diffMs = getTimeDifferenceMs(startTime);\n const diffMinutes = diffMs / (1000 * 60);\n return diffMinutes > minutes;\n};\n\n// Get human-readable duration\nexport const getReadableDuration = (milliseconds: number): string => {\n const seconds = Math.floor(milliseconds / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n};\n\n// Example usage:\nexport const measureExecutionTime = async (func: () => Promise<any>) => {\n const startTime = getCurrentTimestamp();\n await func();\n const duration = getTimeDifferenceMs(startTime);\n return getReadableDuration(duration);\n};\n\n// Performance monitoring with high-resolution timestamps\nexport const getHighResolutionTimestamp = (): number => {\n return performance.now(); // More precise than Date.now() for performance measurements\n};\nexport const getTimestamp = () => {\n return new Date(Date.now()).toLocaleString();\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\nimport {\n RequestedWorkspaceStatus,\n type WorkspaceId,\n WorkspaceStatus,\n} from './types';\nimport { getCurrentTimestamp } from '../../utils/time';\n\nexport const NO_WORKSPACE_ID = 'none';\n\n// the requested state for a workspace\nexport interface WorkspaceState {\n id: string;\n status: WorkspaceStatus; // current status of the workspace\n requestedStatus: RequestedWorkspaceStatus; // the goal state for the workspace\n requestedStatusTimestamp: number;\n}\n\nconst initialState: WorkspaceState = {\n id: NO_WORKSPACE_ID,\n status: WorkspaceStatus.NotFound,\n requestedStatus: RequestedWorkspaceStatus.Unset,\n requestedStatusTimestamp: getCurrentTimestamp(),\n};\n\nconst slice = createSlice({\n name: 'ActiveWorkspace',\n initialState,\n reducers: {\n setActiveWorkspaceId: (state, action: PayloadAction<WorkspaceId>) => {\n state = { ...state, id: action.payload.id };\n return state;\n },\n clearActiveWorkspaceId: (state) => {\n return { ...state, id: NO_WORKSPACE_ID };\n },\n setActiveWorkspaceStatus: (\n state,\n action: PayloadAction<WorkspaceStatus>,\n ) => {\n return { ...state, status: action.payload };\n },\n setRequestedWorkspaceStatus: (\n state,\n action: PayloadAction<RequestedWorkspaceStatus>,\n ) => {\n return {\n ...state,\n requestedStatus: action.payload,\n requestedStatusTimestamp: getCurrentTimestamp(),\n };\n },\n setActiveWorkspace: (_state, action: PayloadAction<WorkspaceState>) => {\n return { ...action.payload };\n },\n },\n});\n\nexport const activeWorkspaceReducer = slice.reducer;\nexport const {\n setActiveWorkspaceId,\n clearActiveWorkspaceId,\n setActiveWorkspaceStatus,\n setRequestedWorkspaceStatus,\n setActiveWorkspace,\n} = slice.actions;\n\nexport const selectActiveWorkspaceId = (state: CoreState): string =>\n state.activeWorkspace.id;\n\nexport const selectActiveWorkspaceStatus = (\n state: CoreState,\n): WorkspaceStatus => state.activeWorkspace.status;\n\nexport const selectRequestedWorkspaceStatus = (\n state: CoreState,\n): RequestedWorkspaceStatus => state.activeWorkspace.requestedStatus;\n\nexport const selectRequestedWorkspaceStatusTimestamp = (\n state: CoreState,\n): number => state.activeWorkspace.requestedStatusTimestamp;\n","import { createEntityAdapter, createSlice } from '@reduxjs/toolkit';\n\nexport type CartItemId = string;\nexport interface CartItem extends Record<string, any> {\n id: CartItemId;\n}\n\nexport const cartAdapter = createEntityAdapter<CartItem, CartItemId>({\n selectId: (item) => item.id,\n});\n\nconst initialState = cartAdapter.getInitialState({});\n\nexport const cartSlice = createSlice({\n name: 'cart',\n initialState: initialState,\n reducers: {\n addItemsToCart: cartAdapter.addMany,\n removeItemsFromCart: cartAdapter.removeMany,\n },\n});\n\nexport const cartReducer = cartSlice.reducer;\nexport const { addItemsToCart, removeItemsFromCart } = cartSlice.actions;\n","import { cartAdapter } from './cartSlice';\nimport type { CoreState } from '../../reducers';\n\nexport const {\n selectById: selectCartItem,\n selectIds: selectCartItems,\n selectAll: selectCart,\n selectTotal: selectCartCount,\n} = cartAdapter.getSelectors((state: CoreState) => state.cart);\n","import {\n addItemsToCart,\n type CartItem,\n cartReducer,\n removeItemsFromCart,\n} from './cartSlice';\n\nimport {\n selectCart,\n selectCartCount,\n selectCartItem,\n selectCartItems,\n} from './cartSelectors';\n\nexport {\n selectCart,\n addItemsToCart,\n removeItemsFromCart,\n type CartItem,\n cartReducer,\n selectCartCount,\n selectCartItem,\n selectCartItems,\n};\n\nexport const cartReducerPath = 'cart';\n","import { gen3Api } from '../gen3';\nimport { ExternalProvider } from './types';\nimport { GEN3_WTS_API } from '../../constants';\n\nexport interface ExternalProviderResponse {\n providers: ExternalProvider[];\n}\n\n/**\n * @description Creates a externalLoginApi for listing the configured identity providers\n * in workspace token service. Includes user token expiration time.\n * @see https://github.com/uc-cdis/workspace-token-service/tree/master\n */\nexport const externalLoginApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getExternalLogins: builder.query<ExternalProviderResponse, void>({\n query: () => ({\n url: `${GEN3_WTS_API}/external_oidc/`,\n }),\n }),\n isExternalConnected: builder.query<boolean, string>({\n query: (idp: string) => ({\n url: `${GEN3_WTS_API}/oauth2/connected?idp=${idp}`,\n }),\n transformResponse: () => {\n return true; // if success then connected is true\n },\n }),\n }),\n});\n\nexport const {\n useGetExternalLoginsQuery,\n useLazyGetExternalLoginsQuery,\n useLazyIsExternalConnectedQuery,\n useIsExternalConnectedQuery,\n} = externalLoginApi;\n","/**\n * Custom error class for resolving DRS object ID errors\n */\nclass ResolveDRSError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ResolveDRSError';\n }\n}\n\n/**\n * Resolves DRS object ID from a list of guids using dataguids.org\n * Use of this function should be limited\n * @param guidsForHostnameResolution\n */\nexport const resolveDRSWithDataGUISOrg = async (\n guidsForHostnameResolution: string[],\n): Promise<Record<string, string>> => {\n const INVALID_INPUT_ERROR =\n 'Invalid input: guidsForHostnameResolution must be an array of strings';\n const RESOLVE_DRS_ERROR = 'Failed to resolve DRS object ID';\n\n if (\n !Array.isArray(guidsForHostnameResolution) ||\n !guidsForHostnameResolution.every(\n (guid: unknown) => typeof guid === 'string',\n )\n ) {\n throw new Error(INVALID_INPUT_ERROR);\n }\n\n try {\n const responses = await Promise.allSettled(\n guidsForHostnameResolution.map(async (guid) => {\n try {\n const response = await fetch(`https://dataguids.org/index/${guid}`);\n if (response.status === 200) {\n try {\n return await response.json();\n } catch (error) {\n throw new ResolveDRSError('Failed to parse response as JSON');\n }\n } else {\n throw new ResolveDRSError(RESOLVE_DRS_ERROR);\n }\n } catch (error) {\n throw new ResolveDRSError(RESOLVE_DRS_ERROR);\n }\n }),\n );\n\n return responses.reduce((acc, response, index) => {\n if (response.status === 'fulfilled' && response.value.data) {\n return {\n ...acc,\n [guidsForHostnameResolution[index]]: response.value.data,\n };\n } else {\n throw new ResolveDRSError(RESOLVE_DRS_ERROR);\n }\n }, {} as Record<string, string>);\n } catch (error) {\n throw new ResolveDRSError(RESOLVE_DRS_ERROR);\n }\n};\n","import { drsHostnamesSelector } from '../drsHostnameSlice';\nimport { coreStore } from '../../../store';\n\nexport const resolveCachedDRS = async (\n guidsForHostnameResolution: string[],\n) : Promise<Record<string, string>> => {\n const state = coreStore.getState();\n const resolvedIds : Record<string, string> = { };\n for (const guid of guidsForHostnameResolution) {\n const hostname = drsHostnamesSelector(guid, state);\n if (hostname) {\n resolvedIds[guid] = hostname;\n }\n }\n return resolvedIds;\n};\n","import { resolveDRSWithDataGUISOrg } from './resolvers/dataGUIDSDotOrg';\nimport { resolveCachedDRS } from './resolvers/cachedDRSResolver';\n\nenum DRSResolverType {\n dataGUISOrg = 'dataGUISOrg',\n cached = 'cached',\n}\n\ntype DRSResolverCatalog = {\n [key in DRSResolverType]: (\n guidsForHostnameResolution: string[],\n ) => Promise<Awaited<Record<string, string>>>;\n};\n\nconst DRS_Resolvers: DRSResolverCatalog = {\n dataGUISOrg: resolveDRSWithDataGUISOrg,\n cached: resolveCachedDRS,\n};\n\n// TODO - add to config file for DRS resolver\nexport const resolveDRSObjectId = (\n guidsForHostnameResolution: string[],\n resolver: DRSResolverType = DRSResolverType.cached,\n) => {\n return DRS_Resolvers[resolver](guidsForHostnameResolution);\n};\n","export const isNotDefined = (x: unknown): x is undefined => {\n return x === undefined || x === null || x === void 0;\n};\n\nexport const isObject = (x: unknown): x is Record<string, unknown> => {\n return typeof x === 'object';\n};\n\nexport const isArray = (x: unknown): x is ReadonlyArray<unknown> => {\n return Array.isArray(x);\n};\n\nexport const isString = (x: unknown): x is string => {\n return typeof x === 'string';\n};\n","/**\n * Prepares a URL for downloading by appending '/download' to the provided apiUrl.\n *\n * @param {string} apiUrl - The base URL to be used for preparing the download URL.\n * @returns {URL} - The prepared download URL as a URL object.\n */\nexport const prepareUrl = (apiUrl: string) => new URL(apiUrl + '/download');\n","import { selectCSRFToken } from '../features/user';\nimport { coreStore } from '../store';\nimport { GEN3_API, GEN3_FENCE_API } from '../constants';\nimport { getCookie } from 'cookies-next';\n\nexport enum HttpMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n DELETE = 'DELETE',\n}\n\nconst DEFAULT_METHOD = HttpMethod.GET;\nconst CONTENT_TYPE_HEADER = 'Content-Type';\nconst CONTENT_TYPE_JSON = 'application/json';\n\nexport const HTTPErrorMessages: Record<number, string> = {\n // 4xx Client Errors\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 402: 'Payment Required',\n 403: 'Forbidden',\n 404: 'Not Found',\n 405: 'Method Not Allowed',\n 406: 'Not Acceptable',\n 407: 'Proxy Authentication Required',\n 408: 'Request Timeout',\n 409: 'Conflict',\n 410: 'Gone',\n 411: 'Length Required',\n 412: 'Precondition Failed',\n 413: 'Payload Too Large',\n 414: 'URI Too Long',\n 415: 'Unsupported Media Type',\n 416: 'Range Not Satisfiable',\n 417: 'Expectation Failed',\n 418: \"I'm a teapot\",\n 421: 'Misdirected Request',\n 422: 'Unprocessable Entity',\n 423: 'Locked',\n 424: 'Failed Dependency',\n 425: 'Too Early',\n 426: 'Upgrade Required',\n 428: 'Precondition Required',\n 429: 'Too Many Requests',\n 431: 'Request Header Fields Too Large',\n 451: 'Unavailable For Legal Reasons',\n\n // 5xx Server Errors\n 500: 'Internal Server Error',\n 501: 'Not Implemented',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n 504: 'Gateway Timeout',\n 505: 'HTTP Version Not Supported',\n 506: 'Variant Also Negotiates',\n 507: 'Insufficient Storage',\n 508: 'Loop Detected',\n 510: 'Not Extended',\n 511: 'Network Authentication Required',\n};\n\n/**\n * Represents an error that occurs during an HTTP request.\n * Extends the built-in `Error` class to provide additional information\n * about the HTTP status code and optional response data.\n */\nexport class HTTPError extends Error {\n constructor(\n public status: number,\n message: string,\n public responseData?: any,\n ) {\n super(message);\n this.name = 'HTTPError';\n }\n}\n\ninterface FetchFencePresignedURLParameters {\n guid: string;\n method?: 'GET' | 'POST';\n onStart?: () => void; // function to call when the download starts\n onDone?: (blob: Blob) => void; // function to call when the download is done\n onError?: (error: Error | HTTPError) => void; // function to call when the download fails\n onAbort?: () => void; // function to call when the download is aborted\n signal?: AbortSignal; // AbortSignal to use for the request\n}\n\nexport const fetchFencePresignedURL = async ({\n guid,\n method = 'GET',\n onAbort = () => null,\n signal = undefined,\n}: FetchFencePresignedURLParameters) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n\n const headers = new Headers();\n headers.set('Content-Type', 'application/json');\n\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n const accessToken = getCookie('credentials_token');\n if (accessToken) {\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n }\n if (csrfToken) headers.set('X-CSRF-Token', csrfToken);\n\n const url = `${GEN3_FENCE_API}/data/download/${guid}`;\n try {\n const response = await fetch(url, {\n method: method,\n headers: headers,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit);\n\n // Check if the response is ok before proceeding\n if (!response.ok) {\n let errorMessage: string;\n let errorData: any;\n\n try {\n // Attempt to parse error response as JSON\n errorData = await response.json();\n errorMessage = errorData.message || response.statusText;\n } catch {\n // If JSON parsing fails, use status text\n errorMessage = response.statusText;\n }\n throw new HTTPError(response.status, errorMessage, errorData);\n }\n return (await response.json())['url'];\n } catch (error: unknown) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n onAbort?.();\n }\n }\n throw error;\n }\n};\n\n/**\n * Retrieves a CSRF token from the server.\n *\n * This asynchronous function sends a GET request to the server's status endpoint\n * to fetch the CSRF token in the response. The token is expected to be included\n * in the JSON response under the `csrf_token` field.\n *\n * @returns {Promise<string | null>} A promise that resolves to the CSRF token as a string if successfully retrieved,\n * or null if the token is not present in the response.\n * @throws {HTTPError} Throws an HTTPError if the server response is not successful.\n */\nconst getCSRFToken = async (): Promise<string | null> => {\n const requestHeaders = new Headers({\n [CONTENT_TYPE_HEADER]: CONTENT_TYPE_JSON,\n });\n const response = await fetch(`${GEN3_API}/_status`, {\n headers: requestHeaders,\n });\n\n if (!response.ok) {\n throw new HTTPError(response.status, response.statusText);\n }\n\n const { csrf: csrfToken } = await response.json();\n return csrfToken || null;\n};\n\n/**\n * Fetches JSON data from a specified URL using the Fetch API.\n *\n * @param {string} url - The URL to fetch the JSON data from.\n * @param {boolean} [requiresCSRF=false] - Indicates whether a CSRF token is required for the request.\n * If true, the CSRF token will be added to the request headers.\n * @param {string} [method=DEFAULT_METHOD] - The HTTP method to use for the request (e.g., 'GET', 'POST').\n * @param {unknown} [body=undefined] - The request body to send, applicable when using methods like 'POST'.\n *\n * @param signal - Abort fetch\n * @returns {Promise<T>} A promise that resolves to the parsed JSON data from the response.\n *\n * @throws {HTTPError} Throws an error if the HTTP response status indicates a failure.\n */\nexport const fetchJSONDataFromURL = async <T = unknown>(\n url: string,\n requiresCSRF: boolean = false,\n method: HttpMethod = DEFAULT_METHOD,\n body: unknown = undefined,\n signal?: AbortSignal,\n): Promise<T | null> => {\n const requestHeaders = new Headers({\n [CONTENT_TYPE_HEADER]: CONTENT_TYPE_JSON,\n });\n\n if (requiresCSRF) {\n const csrfToken = await getCSRFToken();\n if (csrfToken) {\n requestHeaders.set('X-CSRF-Token', csrfToken);\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n const accessToken = getCookie('credentials_token');\n if (accessToken) {\n requestHeaders.set('Authorization', `Bearer ${accessToken}`);\n }\n }\n\n const response = await fetch(url, {\n method,\n headers: requestHeaders,\n body: ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())\n ? body\n : undefined,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit);\n\n if (!response.ok) {\n const errorBody = await response.json();\n throw new HTTPError(response.status, response.statusText, errorBody);\n }\n\n if (response.status === 204) {\n // no content so returns null\n return null;\n }\n return await response.json();\n};\n","import { JSONPath } from 'jsonpath-plus';\nimport { JSONObject, JSONValue } from '../types';\n\ntype JsonPathMapping = { [key: string]: string };\n\nexport const extractValuesFromObject = (\n jsonPathMappings: JsonPathMapping,\n obj: JSONObject,\n): JSONObject => {\n const result: { [key: string]: any } = {};\n\n const extractObjectValue = (\n jsonPath: string,\n obj: JSONObject,\n ): JSONValue | undefined => {\n const extractedValues = JSONPath({ path: jsonPath, json: obj });\n return extractedValues.length > 0 ? extractedValues[0] : undefined;\n };\n\n for (const key in jsonPathMappings) {\n if (key in Object.keys(jsonPathMappings)) {\n // Extract value from an object and store it in the result.\n result[key] = extractObjectValue(jsonPathMappings[key], obj);\n }\n }\n\n return result;\n};\n\nexport const ExtractValueFromObject = <T = any>(\n obj: Record<string, T> | null | undefined,\n key: string,\n valueIfNotFound: T,\n): T => {\n return obj?.[key] ?? valueIfNotFound;\n};\n","import { HistogramData, HistogramDataAsStringKey } from '../types';\n\nexport const DAYS_IN_YEAR = 365.25;\n\n/**\n * Converts HistogramData to HistogramDataAsStringKey by ensuring the key is a string.\n * If the key is already a string, it's used as is.\n * If the key is a number tuple [min, max], it's converted to a string in the format \"min-max\".\n *\n * @param data The HistogramData object to convert\n * @returns HistogramDataAsStringKey with the converted key\n */\nexport const convertToHistogramDataAsStringKey = (\n data: HistogramData,\n): HistogramDataAsStringKey => {\n return {\n key:\n typeof data.key === 'string' ? data.key : `${data.key[0]}-${data.key[1]}`,\n count: data.count,\n };\n};\n\nexport const calculatePercentageAsNumber = (\n count: number,\n total: number,\n): number => (count ? (count / total) * 100 : 0);\n\nexport const calculatePercentageAsString = (\n count: number,\n total: number,\n): string => `${((count / total) * 100).toFixed(2)}%`;\n\nexport const capitalize = (original: string): string => {\n const customCapitalizations: Record<string, string> = {\n id: 'ID',\n uuid: 'UUID',\n dna: 'DNA',\n dbsnp: 'dbSNP',\n cosmic: 'COSMIC',\n civic: 'CIViC',\n dbgap: 'dbGaP',\n ecog: 'ECOG',\n bmi: 'BMI',\n gdc: 'GDC',\n cnv: 'CNV',\n ssm: 'SSM',\n aa: 'AA',\n };\n\n return original\n .split(' ')\n .map(\n (word) =>\n customCapitalizations[word.toLowerCase()] ||\n `${word.charAt(0).toUpperCase()}${word.slice(1)}`,\n )\n .join(' ');\n};\n\ninterface HumanifyParams {\n term: string;\n capitalize?: boolean;\n facetTerm?: boolean;\n}\nexport const humanify = ({\n term = '',\n capitalize: cap = true,\n facetTerm = false,\n}: HumanifyParams): string => {\n let original;\n let humanified;\n if (facetTerm) {\n // Splits on capital letters followed by lowercase letters to find\n // words squished together in a string.\n original = term?.split(/(?=[A-Z][a-z])/).join(' ');\n humanified = term?.replace(/\\./g, ' ').replace(/_/g, ' ').trim();\n } else {\n const split = (original || term)?.split('.');\n humanified = split[split.length - 1]?.replace(/_/g, ' ').trim();\n\n // Special case 'name' to include any parent nested for sake of\n // specificity in the UI\n if (humanified === 'name' && split?.length > 1) {\n humanified = `${split[split?.length - 2]} ${humanified}`;\n }\n }\n return cap ? capitalize(humanified) : humanified;\n};\n\n/*https://github.com/NCI-GDC/portal-ui/blob/develop/src/packages/%40ncigdc/utils/ageDisplay.js*/\n/**\n * Converts age in days into a human-readable format.\n *\n * @param ageInDays - The age in days.\n * @param yearsOnly - If true, only display years.\n * @defaultValue false\n * @param defaultValue - The default value to return if ageInDays is falsy.\n * @defaultValue \"--\"\n * @returns The formatted age string.\n */\nexport const ageDisplay = (\n ageInDays: number,\n yearsOnly: boolean = false,\n defaultValue: string = '--',\n): string => {\n if (ageInDays !== 0 && !ageInDays) {\n return defaultValue;\n }\n const calculateYearsAndDays = (\n years: number,\n days: number,\n ): [number, number] => (days === 365 ? [years + 1, 0] : [years, days]);\n\n const ABS_AGE_DAYS = Math.abs(ageInDays);\n\n const [years, remainingDays] = calculateYearsAndDays(\n Math.floor(ABS_AGE_DAYS / DAYS_IN_YEAR),\n Math.ceil(ABS_AGE_DAYS % DAYS_IN_YEAR),\n );\n\n const formattedYears =\n years === 0 ? '' : `${years} ${years === 1 ? 'year' : 'years'}`;\n\n const formattedDays =\n !yearsOnly && remainingDays > 0\n ? `${remainingDays} ${remainingDays === 1 ? 'day' : 'days'}`\n : years === 0 && remainingDays === 0\n ? '0 days'\n : '';\n\n const ageString = [formattedYears, formattedDays].filter(Boolean).join(' ');\n\n return ageInDays >= 0 ? ageString : `-${ageString}`;\n};\n\n/**\n * Given an object of JSON, stringify it into a string.\n * @param obj - the object to stringify\n * @param defaults - the default value to return if the object is undefined\n * @category Utility\n */\n\nexport const stringifyJSONParam = (\n obj?: Record<string, any>,\n defaults = '{}',\n): string => (obj ? JSON.stringify(obj) : defaults);\n","import { coreStore } from '../../store';\nimport { userAuthApi } from './userSliceRTK';\nimport { fetchJSONDataFromURL, HttpMethod } from '../../utils';\nimport { GEN3_WTS_API } from '../../constants';\nimport { ExternalProvider } from './types';\n\nlet cachedToken: string | null = null;\n\nexport class CsrfTokenError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CsrfTokenError';\n }\n}\n\nexport const getCsrfToken = async (): Promise<string> => {\n if (cachedToken) return cachedToken;\n\n // Get the current state\n const currentState = coreStore.getState();\n\n // Check if token is already in the RTK Query cache\n const tokenResult = userAuthApi.endpoints.getCSRF.select()(currentState);\n\n if (tokenResult?.data?.csrfToken) {\n cachedToken = tokenResult.data.csrfToken;\n return cachedToken;\n }\n\n // If not in cache, trigger the query manually\n try {\n const result = await coreStore.dispatch(\n userAuthApi.endpoints.getCSRF.initiate(),\n );\n\n if ('error' in result) {\n throw new CsrfTokenError(\n `Failed to fetch CSRF token: ${JSON.stringify(result.error)}`,\n );\n }\n\n if (!result.data) {\n throw new CsrfTokenError('No token received from server');\n }\n\n cachedToken = result.data.csrfToken;\n return cachedToken;\n } catch (error) {\n console.error('Failed to fetch CSRF token:', error);\n throw error;\n }\n};\n\ninterface RequestOptions extends RequestInit {\n headers?: HeadersInit;\n}\n\nexport const makeAuthenticatedRequest = async <T>(\n url: string,\n options: RequestOptions = {},\n): Promise<T> => {\n const csrfToken = await getCsrfToken();\n\n const response = await fetch(url, {\n ...options,\n headers: {\n ...options.headers,\n 'X-CSRF-Token': csrfToken,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n};\n\ninterface ExternalProviders {\n providers: ExternalProvider[];\n}\n\ninterface ExternalProvidersResponse extends ExternalProviders {\n error?: Error;\n}\n\nexport const queryWTSFederatedLoginStatus = async (\n signal?: AbortSignal,\n): Promise<ExternalProvidersResponse> => {\n try {\n const results = await fetchJSONDataFromURL<ExternalProviders>(\n `${GEN3_WTS_API}/external_oidc/`,\n false,\n HttpMethod.GET,\n undefined,\n signal,\n );\n\n // Handle both null response and response without providers\n if (!results || !results.providers) {\n return { providers: [] };\n }\n\n return results;\n } catch (error: unknown) {\n return {\n providers: [],\n error: error instanceof Error ? error : new Error('Unknown error'),\n };\n }\n};\n","import { useEffect, useState } from 'react';\nimport { useGetExternalLoginsQuery } from './externalLoginsSlice';\nimport { ExternalProvider, FileMetadata } from './types';\nimport { GUID_PREFIX_PATTERN } from '../../constants';\nimport { resolveDRSObjectId } from '../drsResolver/utils';\nimport { queryWTSFederatedLoginStatus } from './utils';\n\n/**\n * Input is a list of files selected for download.\n * Output is a array of GUID prefixes\n * @param selectedFiles\n */\nconst gatherGUIDPrefixes = (selectedFiles: ReadonlyArray<FileMetadata>) => {\n return selectedFiles.reduce((acc, selectedFile) => {\n if (selectedFile.object_id) {\n const guidDomainPrefix = (\n selectedFile.object_id.match(GUID_PREFIX_PATTERN) || []\n ).shift();\n if (guidDomainPrefix) {\n if (!acc.includes(guidDomainPrefix)) {\n acc.push(guidDomainPrefix);\n }\n }\n }\n return acc;\n }, [] as string[]);\n};\n\n/**\n * Resolves DRS object ID from a list of guids using dataguids.org or other DRS resolver\n * @param guidPrefixes\n */\nconst resolveDRSPrefixes = async (guidPrefixes: string[]) => {\n return await resolveDRSObjectId(guidPrefixes);\n};\n\n// holds hostname of DRS server for each GUID\ninterface ResolvedGUID extends FileMetadata {\n url?: string;\n drsPrefix?: string;\n}\n\n/**\n * Given a list of object ids, extracts and DRS prefixes and resolves them to DRS server hostnames\n * then returns a list of resolved GUIDs, and a list of unresolved GUIDs\n * @param selectedFiles\n * @returns - {\n * resolvedDRSPrefixes: Record<string, string> - map of GUID prefixes to DRS server hostnames\n * resolvedFiles: ResolvedGUID[] - list of resolved GUIDs\n * unresolvedFiles: ResolvedGUID[] - list of unresolved GUIDs\n * }\n */\nconst resolveGUIDsInSelectedFiles = async (\n selectedFiles: ReadonlyArray<FileMetadata>,\n) => {\n if (!selectedFiles || selectedFiles.length === 0) {\n return {\n externalHosts: {},\n resolvedFiles: [],\n unresolvedFiles: [],\n };\n }\n\n const guidPrefixes = gatherGUIDPrefixes(selectedFiles);\n const resolvedDRSPrefixes = await resolveDRSPrefixes(guidPrefixes);\n\n const resolvedIds: ResolvedGUID[] = [];\n const unresolvedIds: ResolvedGUID[] = [];\n selectedFiles.forEach((selectedFile) => {\n if (selectedFile.object_id) {\n const guidDomainPrefix = (\n selectedFile.object_id.match(GUID_PREFIX_PATTERN) || []\n ).shift();\n if (guidDomainPrefix && resolvedDRSPrefixes[guidDomainPrefix]) {\n resolvedIds.push({\n ...selectedFile,\n drsPrefix: guidDomainPrefix,\n url: resolvedDRSPrefixes[guidDomainPrefix],\n });\n }\n } else {\n unresolvedIds.push(selectedFile);\n }\n });\n return {\n externalHosts: resolvedDRSPrefixes,\n resolvedFiles: resolvedIds,\n unresolvedFiles: unresolvedIds,\n };\n};\n\ninterface ExternalLoginStatus {\n providersToAuthenticate?: ExternalProvider[];\n missingProviders?: ExternalProvider[];\n error?: Error;\n}\nconst fetchExternalLogins = async (\n externalProviders: Array<ExternalProvider>,\n selectedFiles: ReadonlyArray<FileMetadata>,\n): Promise<ExternalLoginStatus> => {\n const providers = externalProviders ?? [];\n // find all the providers that do not have tokens\n const unauthenticatedProviders = providers.filter(\n (provider) => !provider.refresh_token_expiration,\n );\n\n try {\n const guidResolutions = await resolveGUIDsInSelectedFiles(selectedFiles);\n const providersToAuthenticate = unauthenticatedProviders.filter(\n (unauthenticatedProvider) =>\n Object.values(guidResolutions.externalHosts).includes(\n new URL(unauthenticatedProvider.base_url).hostname,\n ),\n );\n\n const missingProviders = providersToAuthenticate.filter(\n (provider) =>\n !Object.values(guidResolutions.externalHosts).includes(\n new URL(provider.base_url).hostname,\n ),\n );\n\n return {\n providersToAuthenticate: providersToAuthenticate,\n missingProviders: missingProviders,\n };\n } catch (error: unknown) {\n if (error instanceof Error) {\n return { error };\n }\n return { error: new Error('Unknown error') };\n }\n};\n\ninterface FederatedLoginStatusParams {\n selectedFiles: ReadonlyArray<FileMetadata>;\n}\n\nexport const useGetFederatedLoginStatus = ({\n selectedFiles,\n}: FederatedLoginStatusParams) => {\n const {\n data: wtsResults,\n isLoading: wstIsLoading,\n error: wtsError,\n } = useGetExternalLoginsQuery();\n\n // State to manage the asynchronous results\n const [result, setResult] = useState<ExternalLoginStatus | null>(null);\n\n useEffect(() => {\n const fetchData = async () => {\n if (wtsError || !wtsResults) {\n if (wtsError instanceof Error) setResult({ error: wtsError });\n else setResult({ error: new Error('Unknown error') });\n return;\n }\n\n const results = await fetchExternalLogins(\n wtsResults.providers,\n selectedFiles,\n );\n setResult(results);\n };\n\n // Only run if there's data to act on\n if (!wstIsLoading && wtsResults) {\n fetchData();\n }\n }, [selectedFiles, wstIsLoading, wtsError, wtsResults]);\n\n return {\n isLoading: wstIsLoading,\n data: result,\n error: result?.error || wtsError,\n };\n};\n\nexport const getFederatedLoginStatus = async (\n selectedFiles: ReadonlyArray<FileMetadata>,\n) => {\n const providers = await queryWTSFederatedLoginStatus();\n return await fetchExternalLogins(providers.providers, selectedFiles);\n};\n","import type { Middleware, Reducer } from '@reduxjs/toolkit';\nimport { createApi } from '@reduxjs/toolkit/query/react';\nimport { GraphQLError } from 'graphql';\nimport { JSONObject } from '../../types';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { CoreState } from '../../reducers';\nimport { getCookie } from 'cookies-next';\nimport { selectCSRFToken } from '../user';\n\nexport interface guppyFetchError {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly text: string;\n readonly variables?: Record<string, any>;\n}\n\nexport interface guppyApiSliceRequest {\n readonly query: string;\n readonly variables?: Record<string, unknown>;\n}\n\nexport interface guppyApiResponse<H = JSONObject> {\n readonly data: H;\n readonly errors: Record<string, string>;\n}\n\nexport interface SortOption {\n field: string;\n order: string;\n}\n\nexport interface TablePageOffsetProps {\n readonly pageSize?: number;\n readonly offset?: number;\n readonly sorts?: Array<SortOption>;\n readonly searchTerm?: string;\n}\n\n/**\n * Creates a base class core API for guppy API calls.\n * @returns: guppy core API with guppyAPIFetch base query\n */\nexport const guppyApi = createApi({\n reducerPath: 'guppy',\n\n // TODO: refactor to use fetchBaseQuery\n baseQuery: async (query: guppyApiSliceRequest, api) => {\n const csrfToken = selectCSRFToken(api.getState() as CoreState);\n\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n\n const headers = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'X-CSRF-Token': csrfToken }),\n ...(accessToken && { Authorization: `Bearer ${accessToken}` }),\n };\n try {\n const response = await fetch(`${GEN3_GUPPY_API}/graphql`, {\n headers: headers,\n method: 'POST',\n body: JSON.stringify(query),\n });\n\n const data = await response.json();\n // Check the response for GraphQL errors\n if (data && 'errors' in data) {\n // Return an object with an 'error' property if GraphQL errors are present\n return {\n error: {\n message: data.errors[0].message,\n locations: data.errors[0].locations,\n },\n };\n }\n return { data };\n } catch (e: unknown) {\n if (e instanceof GraphQLError) {\n return {\n error: {\n message: e.message,\n locations: e.locations,\n path: e.path,\n },\n };\n }\n if (e instanceof Error) return { error: e.message };\n return { error: e };\n }\n },\n endpoints: () => ({}),\n});\n\nexport const guppyAPISliceMiddleware = guppyApi.middleware as Middleware;\nexport const guppyApiSliceReducerPath: string = guppyApi.reducerPath;\nexport const guppyApiReducer: Reducer = guppyApi.reducer as Reducer;\n","export interface Intersection {\n operator: 'and';\n operands: ReadonlyArray<Operation>;\n}\n\nexport interface Union {\n operator: 'or';\n operands: ReadonlyArray<Operation>;\n}\n\nexport interface Equals {\n operator: '=';\n field: string;\n operand: number | string | boolean;\n}\n\nexport interface NotEquals {\n operator: '!=';\n field: string;\n operand: number | string;\n}\n\nexport interface Includes {\n operator: 'in' | 'includes';\n field: string;\n operands: ReadonlyArray<string | number>;\n}\n\nexport interface Comparison {\n field: string;\n operand: string | number;\n}\n\nexport interface LessThan extends Comparison {\n operator: '<';\n}\n\nexport interface LessThanOrEquals extends Comparison {\n operator: '<=';\n}\n\nexport interface GreaterThan extends Comparison {\n operator: '>';\n}\n\nexport interface GreaterThanOrEquals extends Comparison {\n operator: '>=';\n}\n\nexport interface Exists {\n readonly operator: 'exists';\n readonly field: string;\n readonly operand: string | number;\n}\n\nexport interface Missing {\n readonly operator: 'missing';\n readonly field: string;\n}\n\nexport interface ExcludeIfAny {\n readonly operator: 'excludeifany';\n readonly field: string;\n readonly operands: ReadonlyArray<string | number>;\n}\n\nexport interface Excludes {\n readonly operator: 'excludes';\n readonly field: string;\n readonly operands: ReadonlyArray<string | number>;\n}\n\nexport interface NestedFilter {\n operator: 'nested';\n path: string;\n operand: Operation;\n}\n\nexport type Operation =\n | Intersection\n | Union\n | Includes\n | Equals\n | NotEquals\n | LessThan\n | LessThanOrEquals\n | GreaterThan\n | GreaterThanOrEquals\n | NestedFilter\n | Exists\n | ExcludeIfAny\n | Missing\n | Excludes;\n\nexport type OperationWithField =\n | Includes\n | Equals\n | NotEquals\n | LessThan\n | LessThanOrEquals\n | GreaterThan\n | GreaterThanOrEquals\n | ExcludeIfAny\n | Excludes\n | Missing\n | Exists;\n\ntype OperandsType = Includes | Excludes | ExcludeIfAny | Intersection | Union;\n\nexport interface FilterSet {\n readonly root: Record<string, Operation>;\n readonly mode: 'and' | 'or';\n}\n\nexport const isFilterSet = (input: any): input is FilterSet => {\n if (typeof input !== 'object' || input === null) {\n return false;\n }\n const { root, mode } = input;\n\n if (typeof root !== 'object' || root === null) {\n return false;\n }\n\n if (!['and', 'or'].includes(mode)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Type guard for Includes\n * @param o - operator to check\n * @category Filters\n */\nexport const isIncludes = (o: unknown): o is Includes =>\n (o as Includes).operator === 'includes' || (o as Includes).operator === 'in';\n\nexport const isUnion = (value: unknown): value is Union => {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as Union).operator === 'or' &&\n Array.isArray((value as Union).operands)\n );\n};\nexport const isIntersection = (value: unknown): value is Intersection => {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as Intersection).operator === 'and' &&\n Array.isArray((value as Intersection).operands)\n );\n};\n\n/**\n * Type guard for Union or Intersection\n * @param o - operator to check\n * @category Filters\n */\nexport const isIntersectionOrUnion = (\n o: Operation,\n): o is Intersection | Union =>\n (o as Intersection).operator === 'and' || (o as Union).operator === 'or';\n\nexport const isOperandsType = (\n operation: Operation,\n): operation is OperandsType => {\n return (operation as OperandsType)?.operands !== undefined;\n};\n\nexport const ifOperationWithField = (\n operation: Operation,\n): operation is OperationWithField => {\n return (operation as OperationWithField).field !== undefined;\n};\n\nexport const isNestedFilter = (\n operation: Operation,\n): operation is NestedFilter => {\n return (operation as NestedFilter).operator === 'nested';\n};\n\nexport interface OperationHandler<T> {\n handleEquals: (op: Equals) => T;\n handleNotEquals: (op: NotEquals) => T;\n handleLessThan: (op: LessThan) => T;\n handleLessThanOrEquals: (op: LessThanOrEquals) => T;\n handleGreaterThan: (op: GreaterThan) => T;\n handleGreaterThanOrEquals: (op: GreaterThanOrEquals) => T;\n handleIncludes: (op: Includes) => T;\n handleExcludes: (op: Excludes) => T;\n handleExcludeIfAny: (op: ExcludeIfAny) => T;\n handleIntersection: (op: Intersection) => T;\n handleUnion: (op: Union) => T;\n handleNestedFilter: (op: NestedFilter) => T;\n handleExists: (op: Exists) => T;\n handleMissing: (op: Missing) => T;\n}\n\n/**\n * Operand types for filter operations\n */\nexport type EnumFilterValue = ReadonlyArray<string | number>;\nexport type RangeFilterValue = string | number;\nexport type BooleanFilterValue = boolean;\nexport type SetFilterValue = ReadonlyArray<Operation>;\nexport type FilterValue =\n | EnumFilterValue\n | RangeFilterValue\n | BooleanFilterValue\n | SetFilterValue\n | undefined;\n\nexport type FacetBucket = {\n key: string;\n doc_count: number;\n};\n\nexport type HistogramBucket = {\n key: string | [number, number];\n count: number;\n};\n\nexport type IndexedFilterSet = Record<string, FilterSet>;\n\nexport const isIndexedFilterSetEmpty = (filters: IndexedFilterSet): boolean =>\n Object.values(filters).every(\n (filterSet) => Object.keys(filterSet).length === 0,\n );\n\nexport type UnionOrIntersection = Union | Intersection;\n\nexport const EmptyFilterSet: FilterSet = { mode: 'and', root: {} };\n","import { isEqual } from 'lodash';\nimport {\n EnumFilterValue,\n Equals,\n ExcludeIfAny,\n Excludes,\n Exists,\n FilterSet,\n FilterValue,\n GreaterThan,\n GreaterThanOrEquals,\n ifOperationWithField,\n Includes,\n Intersection,\n LessThan,\n LessThanOrEquals,\n Missing,\n NestedFilter,\n NotEquals,\n Operation,\n OperationHandler,\n OperationWithField,\n Union,\n} from './types';\n\nexport type OperatorWithFieldAndArrayOfOperands =\n | Includes\n | Excludes\n | ExcludeIfAny;\n\nexport const isOperationWithField = (\n operation: OperationWithField | Operation,\n): operation is OperationWithField => {\n return (operation as OperationWithField)?.field !== undefined;\n};\n\nexport const isOperatorWithFieldAndArrayOfOperands = (\n operation: unknown,\n): operation is OperatorWithFieldAndArrayOfOperands => {\n if (\n typeof operation === 'object' &&\n operation !== null &&\n 'operands' in operation &&\n Array.isArray(operation.operands) &&\n 'field' in operation &&\n typeof operation.field === 'string' // Assuming `field` should be a string\n ) {\n const { operator } = (operation as any).operator;\n return (\n operator === 'in' || operator === 'exclude' || operator === 'excludeifany'\n );\n }\n return false;\n};\n\nexport const extractFilterValue = (op: Operation): FilterValue => {\n const valueExtractorHandler = new ValueExtractorHandler();\n return handleOperation<FilterValue>(valueExtractorHandler, op);\n};\nexport const extractEnumFilterValue = (op: Operation): EnumFilterValue => {\n const enumValueExtractorHandler = new EnumValueExtractorHandler();\n const results = handleOperation<EnumFilterValue | undefined>(\n enumValueExtractorHandler,\n op,\n );\n return results ?? [];\n};\n\nconst assertNever = (x: never): never => {\n throw Error(`Exhaustive comparison did not handle: ${x}`);\n};\n\nexport const handleOperation = <T>(\n handler: OperationHandler<T>,\n op: Operation,\n): T => {\n switch (op.operator) {\n case '=':\n return handler.handleEquals(op);\n case '!=':\n return handler.handleNotEquals(op);\n case '<':\n return handler.handleLessThan(op);\n case '<=':\n return handler.handleLessThanOrEquals(op);\n case '>':\n return handler.handleGreaterThan(op);\n case '>=':\n return handler.handleGreaterThanOrEquals(op);\n case 'and':\n return handler.handleIntersection(op);\n case 'or':\n return handler.handleUnion(op);\n case 'nested':\n return handler.handleNestedFilter(op);\n case 'in':\n case 'includes':\n return handler.handleIncludes(op);\n case 'excludeifany':\n return handler.handleExcludeIfAny(op);\n case 'excludes':\n return handler.handleExcludes(op);\n case 'exists':\n return handler.handleExists(op);\n case 'missing':\n return handler.handleMissing(op);\n default:\n return assertNever(op);\n }\n};\n\n/**\n * Return true if a FilterSet's root value is an empty object\n * @param fs - FilterSet to test\n */\nexport const isFilterEmpty = (fs: FilterSet): boolean => isEqual({}, fs);\n\nexport interface FilterGroup {\n readonly filterIndex: number;\n readonly filter: FilterSet;\n}\n\nexport interface GQLEqual {\n '=': {\n [key: string]: string | number | boolean;\n };\n}\n\nexport interface GQLNotEqual {\n '!=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLLessThan {\n '<': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLLessThanOrEquals {\n '<=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLGreaterThan {\n '>': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLGreaterThanOrEquals {\n '>=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLIncludes {\n in: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLExcludes {\n exclude: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLExists {\n not: {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLMissing {\n is: {\n [key: string]: 'MISSING';\n };\n}\n\nexport interface GQLExcludeIfAny {\n excludeifany: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface NumericFromTo {\n readonly from: number;\n readonly to: number;\n}\n\nexport interface GQLRange {\n range: {\n [key: string]: ReadonlyArray<{ ranges: NumericFromTo[] }>;\n };\n}\n\n/**\n * Type guard to check if an object is a GQLIntersection\n * @param value - The value to check\n * @returns True if the value is a GQLIntersection\n */\nexport const isGQLIntersection = (value: unknown): value is GQLIntersection => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'and' in value &&\n Array.isArray((value as GQLIntersection).and)\n );\n};\n\nexport interface GQLIntersection {\n and: ReadonlyArray<GQLFilter>;\n}\n\nexport interface GQLUnion {\n or: ReadonlyArray<GQLFilter>;\n}\n\n/**\n * Type guard to check if an object is a GQLIntersection\n * @param value - The value to check\n * @returns True if the value is a GQLIntersection\n */\nexport const isGQLUnion = (value: unknown): value is GQLUnion => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'or' in value &&\n Array.isArray((value as GQLUnion).or)\n );\n};\n\ntype NestedContents = GQLFilter & {\n path: string;\n};\n\nexport interface GQLNestedFilter {\n nested: NestedContents;\n}\n\nexport type GQLFilter =\n | GQLEqual\n | GQLNotEqual\n | GQLLessThan\n | GQLLessThanOrEquals\n | GQLGreaterThan\n | GQLGreaterThanOrEquals\n | GQLIncludes\n | GQLExcludes\n | GQLExcludeIfAny\n | GQLIntersection\n | GQLUnion\n | GQLExists\n | GQLMissing\n | GQLNestedFilter;\n\nexport class ToGqlHandler implements OperationHandler<GQLFilter> {\n handleEquals = (op: Equals): GQLEqual => ({\n '=': {\n [op.field]: op.operand,\n },\n });\n handleNotEquals = (op: NotEquals): GQLNotEqual => ({\n '!=': {\n [op.field]: op.operand,\n },\n });\n handleLessThan = (op: LessThan): GQLLessThan => ({\n '<': {\n [op.field]: op.operand,\n },\n });\n handleLessThanOrEquals = (op: LessThanOrEquals): GQLLessThanOrEquals => ({\n '<=': {\n [op.field]: op.operand,\n },\n });\n handleGreaterThan = (op: GreaterThan): GQLGreaterThan => ({\n '>': {\n [op.field]: op.operand,\n },\n });\n handleGreaterThanOrEquals = (\n op: GreaterThanOrEquals,\n ): GQLGreaterThanOrEquals => ({\n '>=': {\n [op.field]: op.operand,\n },\n });\n\n handleIncludes = (op: Includes): GQLIncludes => ({\n in: {\n [op.field]: op.operands,\n },\n });\n\n handleExcludes = (op: Excludes): GQLExcludes => ({\n exclude: {\n [op.field]: op.operands,\n },\n });\n\n handleExcludeIfAny = (op: ExcludeIfAny): GQLExcludeIfAny => ({\n excludeifany: {\n [op.field]: op.operands,\n },\n });\n\n handleIntersection = (op: Intersection): GQLIntersection => ({\n and: op.operands.map((x) =>\n convertFilterToGqlFilter(x),\n ) as ReadonlyArray<GQLFilter>,\n });\n\n handleUnion = (op: Union): GQLUnion => ({\n or: op.operands.map((x) => convertFilterToGqlFilter(x)),\n });\n\n handleMissing = (op: Missing): GQLMissing => ({\n is: {\n [op.field]: 'MISSING',\n },\n });\n\n handleExists = (op: Exists): GQLExists => ({\n not: {\n [op.field]: op?.operand ?? null,\n },\n });\n\n handleNestedFilter = (op: NestedFilter): GQLNestedFilter => {\n const child: GQLFilter = convertFilterToGqlFilter(op.operand);\n return {\n nested: {\n path: op.path,\n ...child,\n },\n } as GQLNestedFilter;\n };\n}\n\nexport const convertFilterToGqlFilter = (filter: Operation): GQLFilter => {\n const handler: OperationHandler<GQLFilter> = new ToGqlHandler();\n return handleOperation(handler, filter);\n};\n\nexport const convertFilterSetToGqlFilter = (\n fs: FilterSet,\n toplevelOp: 'and' | 'or' = 'and',\n): GQLFilter => {\n const fsKeys = Object.keys(fs.root);\n // if no keys return undefined\n if (fsKeys.length === 0) return { and: [] };\n\n return toplevelOp === 'and'\n ? { and: fsKeys.map((key) => convertFilterToGqlFilter(fs.root[key])) }\n : { or: fsKeys.map((key) => convertFilterToGqlFilter(fs.root[key])) };\n};\n\nexport interface GqlOperationHandler<T> {\n handleEquals: (op: GQLEqual) => T;\n handleNotEquals: (op: GQLNotEqual) => T;\n handleLessThan: (op: GQLLessThan) => T;\n handleLessThanOrEquals: (op: GQLLessThanOrEquals) => T;\n handleGreaterThan: (op: GQLGreaterThan) => T;\n handleGreaterThanOrEquals: (op: GQLGreaterThanOrEquals) => T;\n handleIncludes: (op: GQLIncludes) => T;\n handleExcludes: (op: GQLExcludes) => T;\n handleExcludeIfAny: (op: GQLExcludeIfAny) => T;\n handleIntersection: (op: GQLIntersection) => T;\n handleUnion: (op: GQLUnion) => T;\n handleNestedFilter: (op: GQLNestedFilter) => T;\n handleExists: (op: GQLExists) => T;\n handleMissing: (op: GQLMissing) => T;\n}\n\nexport const handleGqlOperation = <T>(\n handler: GqlOperationHandler<T>,\n op: GQLFilter,\n): T => {\n const operationKeys = Object.keys(op);\n\n if (operationKeys.includes('=')) {\n return handler.handleEquals(op as GQLEqual);\n }\n if (operationKeys.includes('!=')) {\n return handler.handleNotEquals(op as GQLNotEqual);\n }\n if (operationKeys.includes('<')) {\n return handler.handleLessThan(op as GQLLessThan);\n }\n if (operationKeys.includes('<=')) {\n return handler.handleLessThanOrEquals(op as GQLLessThanOrEquals);\n }\n if (operationKeys.includes('>')) {\n return handler.handleGreaterThan(op as GQLGreaterThan);\n }\n if (operationKeys.includes('>=')) {\n return handler.handleGreaterThanOrEquals(op as GQLGreaterThanOrEquals);\n }\n if (operationKeys.includes('in')) {\n return handler.handleIncludes(op as GQLIncludes);\n }\n if (operationKeys.includes('exclude')) {\n return handler.handleExcludes(op as GQLExcludes);\n }\n if (operationKeys.includes('excludeifany')) {\n return handler.handleExcludeIfAny(op as GQLExcludeIfAny);\n }\n if (operationKeys.includes('and')) {\n return handler.handleIntersection(op as GQLIntersection);\n }\n if (operationKeys.includes('or')) {\n return handler.handleUnion(op as GQLUnion);\n }\n if (operationKeys.includes('nested')) {\n return handler.handleNestedFilter(op as GQLNestedFilter);\n }\n if (operationKeys.includes('is')) {\n return handler.handleExists(op as GQLExists);\n }\n if (operationKeys.includes('not')) {\n return handler.handleMissing(op as GQLMissing);\n }\n return assertNever(op as never);\n};\n\nexport const convertGqlFilterToFilter = (gqlFilter: GQLFilter): Operation => {\n const handler: GqlOperationHandler<Operation> = new ToOperationHandler();\n return handleGqlOperation(handler, gqlFilter);\n};\n\n/**\n * Convert GQL to Filterset\n * Note assumes all GqlOperators have one field: value\n */\nclass ToOperationHandler implements GqlOperationHandler<Operation> {\n handleEquals = (op: GQLEqual): Equals => {\n const [field, value] = Object.entries(op['='])[0];\n return {\n operator: '=',\n field: field,\n operand: value,\n };\n };\n handleNotEquals = (op: GQLNotEqual): NotEquals => {\n const [field, value] = Object.entries(op['!='])[0];\n return {\n operator: '!=',\n field: field,\n operand: value,\n };\n };\n handleLessThan = (op: GQLLessThan): LessThan => {\n const [field, value] = Object.entries(op['<'])[0];\n return {\n operator: '<',\n field: field,\n operand: value,\n };\n };\n handleLessThanOrEquals = (op: GQLLessThanOrEquals): LessThanOrEquals => {\n const [field, value] = Object.entries(op['<='])[0];\n return {\n operator: '<=',\n field: field,\n operand: value,\n };\n };\n handleGreaterThan = (op: GQLGreaterThan): GreaterThan => {\n const [field, value] = Object.entries(op['>'])[0];\n return {\n operator: '>',\n field: field,\n operand: value,\n };\n };\n handleGreaterThanOrEquals = (\n op: GQLGreaterThanOrEquals,\n ): GreaterThanOrEquals => {\n const [field, value] = Object.entries(op['>='])[0];\n return {\n operator: '>=',\n field: field,\n operand: value,\n };\n };\n handleIncludes = (op: GQLIncludes): Includes => {\n const [field, value] = Object.entries(op.in)[0];\n return {\n operator: 'in',\n field: field,\n operands: value,\n };\n };\n handleExcludes = (op: GQLExcludes): Excludes => {\n const [field, value] = Object.entries(op.exclude)[0];\n return {\n operator: 'excludes',\n field: field,\n operands: value,\n };\n };\n handleExcludeIfAny = (op: GQLExcludeIfAny): ExcludeIfAny => {\n const [field, value] = Object.entries(op.excludeifany)[0];\n\n return {\n operator: 'excludeifany',\n field: field,\n operands: value,\n };\n };\n handleIntersection = (op: GQLIntersection): Intersection => ({\n operator: 'and',\n operands: op.and.map(convertGqlFilterToFilter),\n });\n handleUnion = (op: GQLUnion): Union => ({\n operator: 'or',\n operands: op.or.map(convertGqlFilterToFilter),\n });\n handleExists = (op: GQLExists): Exists => {\n const [field, value] = Object.entries(op.not)[0];\n return {\n operator: 'exists',\n field: field,\n operand: value,\n };\n };\n handleMissing = (op: GQLMissing): Missing => {\n const field = Object.keys(op.is)[0];\n return {\n operator: 'missing',\n field: field,\n };\n };\n handleNestedFilter = (op: GQLNestedFilter): NestedFilter => ({\n operator: 'nested',\n path: op.nested.path,\n operand: convertGqlFilterToFilter(op.nested),\n });\n}\n\n/**\n * Extract the operand values, if operands themselves have values, otherwise undefined.\n */\nexport class ValueExtractorHandler implements OperationHandler<FilterValue> {\n handleEquals: (op: Equals) => string | number | boolean = (op: Equals) =>\n op.operand;\n handleNotEquals: (op: NotEquals) => string | number = (op: NotEquals) =>\n op.operand;\n handleIncludes: (op: Includes) => ReadonlyArray<string | number> = (\n op: Includes,\n ) => op.operands;\n handleExcludes: (op: Excludes) => ReadonlyArray<string | number> = (\n op: Excludes,\n ) => op.operands;\n handleExcludeIfAny: (op: ExcludeIfAny) => ReadonlyArray<string | number> = (\n op: ExcludeIfAny,\n ) => op.operands;\n handleGreaterThanOrEquals: (op: GreaterThanOrEquals) => string | number = (\n op: GreaterThanOrEquals,\n ) => op.operand;\n handleGreaterThan: (op: GreaterThan) => string | number = (op: GreaterThan) =>\n op.operand;\n handleLessThan: (op: LessThan) => string | number = (op: LessThan) =>\n op.operand;\n handleLessThanOrEquals: (op: LessThanOrEquals) => string | number = (\n op: LessThanOrEquals,\n ) => op.operand;\n handleIntersection: (op: Intersection) => undefined = (_arg: Intersection) =>\n undefined;\n handleUnion: (op: Union) => undefined = (_: Union) => undefined;\n handleNestedFilter: (op: NestedFilter) => undefined = (_: NestedFilter) =>\n undefined;\n handleExists: (op: Exists) => undefined = (_: Exists) => undefined;\n handleMissing: (op: Missing) => undefined = (_: Missing) => undefined;\n}\n\n/**\n * Extract the operand values, if operands themselves have values, otherwise undefined.\n */\nexport class EnumValueExtractorHandler\n implements OperationHandler<EnumFilterValue | undefined>\n{\n handleEquals: (_: Equals) => undefined = (_: Equals) => undefined;\n handleNotEquals: (_: NotEquals) => undefined = (_: NotEquals) => undefined;\n handleIncludes: (op: Includes) => ReadonlyArray<string | number> = (\n op: Includes,\n ) => op.operands;\n handleExcludes: (op: Excludes) => ReadonlyArray<string | number> = (\n op: Excludes,\n ) => op.operands;\n handleExcludeIfAny: (op: ExcludeIfAny) => ReadonlyArray<string | number> = (\n op: ExcludeIfAny,\n ) => op.operands;\n handleGreaterThanOrEquals: (_: GreaterThanOrEquals) => undefined = (\n _: GreaterThanOrEquals,\n ) => undefined;\n handleGreaterThan: (_: GreaterThan) => undefined = (_: GreaterThan) =>\n undefined;\n handleLessThan: (op: LessThan) => undefined = (_: LessThan) => undefined;\n handleLessThanOrEquals: (op: LessThanOrEquals) => undefined = (\n _: LessThanOrEquals,\n ) => undefined;\n handleIntersection: (op: Intersection) => undefined = (_: Intersection) =>\n undefined;\n handleUnion: (op: Union) => undefined = (_: Union) => undefined;\n handleNestedFilter: (op: NestedFilter) => EnumFilterValue | undefined = (\n op: NestedFilter,\n ) => {\n return extractEnumFilterValue(op.operand);\n };\n handleExists: (op: Exists) => undefined = (_: Exists) => undefined;\n handleMissing: (op: Missing) => undefined = (_: Missing) => undefined;\n}\n\nexport const appendFilterToOperation = (\n filter: Intersection | Union | undefined,\n addition: Intersection | Union | undefined,\n): Intersection | Union => {\n if (filter === undefined && addition === undefined)\n return { operator: 'and', operands: [] };\n if (addition === undefined && filter) return filter;\n if (filter === undefined && addition) return addition;\n return { ...filter, operands: [...(filter?.operands || []), addition] } as\n | Intersection\n | Union;\n};\n\nexport const filterSetToOperation = (\n fs: FilterSet | undefined,\n): Operation | undefined => {\n if (!fs) return undefined;\n switch (fs.mode) {\n case 'and':\n return Object.keys(fs.root).length == 0\n ? undefined\n : {\n operator: fs.mode,\n operands: Object.keys(fs.root).map((k): Operation => {\n return fs.root[k];\n }),\n };\n }\n return undefined;\n};\n\n/**\n * Constructs a nested operation object based on the provided field and leaf operand.\n * If the field does not contain a dot '.', it either assigns the field to the leaf operand (if applicable)\n * or returns the leaf operand as is. When the field contains dots, it splits the field into parts,\n * creates a \"nested\" operation for the root field, and recursively constructs the nested structure\n * for the remaining portion of the field.\n *\n * @param {string} field - The hierarchical field path, with segments separated by dots (e.g., \"root.child\").\n * @param {Operation} leafOperand - The operation to be nested within the specified path.\n * @param parentPath - The parent path of the current field. Guppy nested filters require a parent path.\n * @param depth\n * @returns {Operation} A nested operation object that represents the structured path and operand.\n */\nexport const buildNestedGQLFilter = (\n field: string,\n leafOperand: GQLFilter,\n parentPath: string | undefined = undefined,\n): GQLFilter => {\n if (!field.includes('.')) {\n return leafOperand;\n }\n\n const splitFieldArray = field.split('.');\n const nextField = splitFieldArray.shift();\n\n if (!nextField) {\n console.warn('Invalid field path:', field);\n return leafOperand;\n }\n\n const currentPath = parentPath ? `${parentPath}.${nextField}` : nextField;\n\n return {\n nested: {\n path: currentPath,\n ...buildNestedGQLFilter(\n splitFieldArray.join('.'),\n leafOperand,\n currentPath,\n ),\n },\n };\n};\n\n/**\n * Constructs a nested operation object based on the provided field and leaf operand.\n * If the field does not contain a dot '.', it either assigns the field to the leaf operand (if applicable)\n * or returns the leaf operand as is. When the field contains dots, it splits the field into parts,\n * creates a \"nested\" operation for the root field, and recursively constructs the nested structure\n * for the remaining portion of the field.\n *\n * @param {string} field - The hierarchical field path, with segments separated by dots (e.g., \"root.child\").\n * @param {Operation} leafOperand - The operation to be nested within the specified path.\n * @param parentPath - The parent path of the current field. Guppy nested filters require a parent path.\n * @returns {Operation} A nested operation object that represents the structured path and operand.\n */\nexport const buildNestedFilterForOperation = (\n field: string,\n leafOperand: Operation,\n parentPath: string | undefined = undefined,\n): Operation => {\n if (!field.includes('.')) {\n // at the end of the path\n if (ifOperationWithField(leafOperand)) {\n // update the field for operations with a field\n return { ...leafOperand, field };\n }\n return leafOperand;\n }\n\n const splitFieldArray = field.split('.');\n const nextField = splitFieldArray.shift();\n\n if (!nextField) {\n console.warn('Invalid field path:', field);\n return leafOperand;\n }\n\n const currentPath = parentPath ? `${parentPath}.${nextField}` : nextField;\n\n return {\n operator: 'nested',\n path: currentPath,\n operand: buildNestedFilterForOperation(\n splitFieldArray.join('.'),\n leafOperand,\n currentPath,\n ),\n } as NestedFilter;\n};\n","const FieldNameOverrides: Record<string, string> = {\n gender: 'Sex',\n Gender: 'Sex',\n};\n\nconst COMMON_PREPOSITIONS = [\n 'a',\n 'an',\n 'and',\n 'at',\n 'but',\n 'by',\n 'for',\n 'in',\n 'is',\n 'nor',\n 'of',\n 'on',\n 'or',\n 'out',\n 'so',\n 'the',\n 'to',\n 'up',\n 'yet',\n];\n\nconst capitalize = (s: string): string =>\n s.length > 0 ? s[0].toUpperCase() + s.slice(1) : '';\n\nexport const trimFirstFieldNameToTitle = (\n fieldName: string,\n trim = false,\n): string => {\n if (trim) {\n const source = fieldName.slice(fieldName.indexOf('.') + 1);\n return fieldNameToTitle(source ? source : fieldName, 0);\n }\n return fieldNameToTitle(fieldName);\n};\n\n/**\n * Converts a filter name to a title,\n * For example files.input.experimental_strategy will get converted to Experimental Strategy\n * if sections == 2 then the output would be Input Experimental Strategy\n * @param fieldName input filter expected to be: string.firstpart_secondpart\n * @param sections number of \"sections\" string.string.string to got back from the end of the field\n */\n\nexport const fieldNameToTitle = (fieldName: string, sections = 1): string => {\n if (fieldName in FieldNameOverrides) {\n return FieldNameOverrides[fieldName];\n }\n if (fieldName === undefined) return 'No Title';\n\n return fieldName\n .split('.')\n .slice(-sections)\n .map((s) => s.split('_'))\n .flat()\n .map((word) =>\n COMMON_PREPOSITIONS.includes(word) ? word : capitalize(word),\n )\n .join(' ');\n};\n\n/**\n * Extracts the index name from the field name\n * @param fieldName\n */\nexport const extractIndexFromFullFieldName = (fieldName: string): string =>\n fieldName.split('.')[0];\n\n/**\n * prepend the index name to the field name\n */\nexport const prependIndexToFieldName = (\n fieldName: string,\n index: string,\n): string => `${index}.${fieldName}`;\n\n/**\n * extract the field name from the index.field name\n */\nexport const extractFieldNameFromFullFieldName = (fieldName: string): string =>\n fieldName.split('.').slice(1).join('.');\n\n/**\n * extract the field name and the index from the index.field name returning as a tuple\n */\nexport const extractIndexAndFieldNameFromFullFieldName = (\n fieldName: string,\n): [string, string] => {\n const [index, ...rest] = fieldName.split('.');\n return [index, rest.join('.')];\n};\n","import {\n FilterSet,\n isIntersectionOrUnion,\n isNestedFilter,\n Operation,\n} from '../filters';\nimport { type CohortId, StorageEntity } from './types';\n\nexport const defaultCohortNameGenerator = (): string =>\n `Custom cohort ${new Date()\n .toLocaleString('en-CA', {\n timeZone: 'America/Chicago',\n hour12: false,\n })\n .replace(',', '')}`;\n\nexport const isNameUnique = <T extends CohortId = CohortId>(\n entities: Array<StorageEntity<T>>,\n name: string,\n excludeId?: T,\n): boolean => {\n const trimmedName = name.trim();\n if (!trimmedName) return false;\n\n return !entities.some(\n (cohort) =>\n cohort &&\n cohort.id !== excludeId &&\n cohort.name.trim().toLowerCase() === trimmedName.toLowerCase(),\n );\n};\n\nexport const generateUniqueName = <T extends CohortId = CohortId>(\n entities: Array<StorageEntity<T>>,\n baseName: string,\n): string => {\n const trimmedBaseName = baseName.trim();\n\n // If base name is unique, use it\n if (isNameUnique(entities, trimmedBaseName)) {\n return trimmedBaseName;\n }\n\n // Find a unique name by appending numbers\n let counter = 1;\n let uniqueName: string;\n\n do {\n uniqueName = `${trimmedBaseName} (${counter})`;\n counter++;\n } while (!isNameUnique(entities, uniqueName));\n\n return uniqueName;\n};\n\n/**\n * This function takes a FilterSet object and a prefix string as input.\n * It filters the root property of the FilterSet object and returns a\n * new FilterSet object that only contains filters with field names\n * that start with the specified prefix.\n *\n * @param fs - The FilterSet object to filter\n * @param prefix - The prefix to filter by\n * @returns - A new FilterSet object that only contains filters with field names that start with the specified prefix\n * @category Filters\n */\nexport const extractFiltersWithPrefixFromFilterSet = (\n fs: FilterSet | undefined,\n prefix: string,\n): FilterSet => {\n if (fs === undefined || fs.root === undefined) {\n return { mode: 'and', root: {} } as FilterSet;\n }\n return Object.values(fs.root).reduce(\n (acc, filter: Operation) => {\n if (isIntersectionOrUnion(filter) || isNestedFilter(filter)) return acc;\n if (filter.field.startsWith(prefix)) {\n acc.root[filter.field] = filter;\n }\n return acc;\n },\n { mode: 'and', root: {} } as FilterSet,\n );\n};\n","import {\n createEntityAdapter,\n createSlice,\n type EntityState,\n type PayloadAction,\n} from '@reduxjs/toolkit';\nimport { type CoreState } from '../../reducers';\nimport {\n type FilterSet,\n type IndexedFilterSet,\n type Operation,\n} from '../filters';\nimport { defaultCohortNameGenerator, generateUniqueName } from './utils';\nimport { type Cohort, type CohortId } from './types';\nimport { customAlphabet } from 'nanoid';\n\n/**\n * Cohorts in Gen3 are defined as a set of filters for each index in the data.\n * This means one cohort id defined for all \"tabs\" in CohortBuilder (explorer)\n * Switching a cohort id means all the cohorts for the index are changed.\n */\n\nexport const DEFAULT_COHORT_NAME = 'Cohort';\nexport const NULL_COHORT_ID = 'null_cohort_id';\n\nexport interface CurrentCohortState {\n currentCohortId: string;\n message?: string[];\n}\n\ninterface UpdateFilterParams {\n index: string;\n field: string;\n filter: Operation;\n}\n\ninterface SetFilterParams {\n index: string;\n filters: FilterSet;\n}\n\ninterface SetAllIndexFiltersParams {\n filters: IndexedFilterSet;\n}\n\ninterface RemoveFilterParams {\n index: string;\n field: string;\n}\n\nexport const createCohortName = (postfix: string): string => {\n return `Custom Cohort ${postfix}`;\n};\n\ninterface ClearAllFilterParams {\n index: string;\n}\n\nexport const newCohort = ({\n filters = {},\n customName,\n}: {\n filters?: IndexedFilterSet;\n customName?: string;\n}): Cohort => {\n const ts = new Date().toISOString();\n const newName = customName ?? defaultCohortNameGenerator();\n const newId = createCohortId();\n return {\n name: newName,\n id: newId,\n filters: filters ?? {},\n modified: false,\n saved: false,\n createdDatetime: ts,\n modifiedDatetime: ts,\n counts: {},\n };\n};\n\nconst nanoid = customAlphabet('1234567890abcdef', 16);\n\nexport const createCohortId = (): string => nanoid();\n\nexport const cohortsAdapter = createEntityAdapter<Cohort, CohortId>({\n sortComparer: (a, b) => {\n if (a.modifiedDatetime <= b.modifiedDatetime) return 1;\n else return -1;\n },\n selectId: (cohort: Cohort) => cohort.id,\n});\n\n// Create an initial unsaved cohort\nconst initialCohort = newCohort({ customName: DEFAULT_COHORT_NAME });\n\nconst emptyInitialState = cohortsAdapter.getInitialState<CurrentCohortState>({\n currentCohortId: initialCohort.id,\n message: undefined, // message is used to inform frontend components of changes to the cohort.\n});\n\n// Set the initial cohort in the adapter state\nconst initialState = cohortsAdapter.setOne(emptyInitialState, initialCohort);\n\nconst getCurrentCohortId = (\n state: EntityState<Cohort, string> & CurrentCohortState,\n): CohortId => state.currentCohortId;\n\ninterface CreateCohortParams {\n name?: string;\n filters?: IndexedFilterSet;\n setAsCurrent?: boolean;\n}\n\ninterface UpdateCohortNameParams {\n id: string;\n name: string;\n}\n\n/**\n * Redux slice for cohort filters\n */\n\nconst cohortManagerSlice = createSlice({\n name: 'cohort',\n initialState: initialState,\n reducers: {\n createNewCohort: (state, action: PayloadAction<CreateCohortParams>) => {\n const baseName = action.payload.name || `Cohort`;\n const uniqueName = generateUniqueName(\n Object.values(state.entities),\n baseName,\n );\n\n const cohort = newCohort({\n filters: action.payload.filters,\n customName: uniqueName,\n });\n cohortsAdapter.addOne(state, cohort);\n if (action.payload?.setAsCurrent) {\n state.currentCohortId = cohort.id;\n }\n },\n\n updateCohortName: (\n state,\n action: PayloadAction<UpdateCohortNameParams>,\n ) => {\n const { id, name } = action.payload;\n cohortsAdapter.updateOne(state, {\n id: id,\n changes: {\n name: name,\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n removeCohort: (\n state,\n action: PayloadAction<{\n shouldShowMessage?: boolean;\n id: string;\n }>,\n ) => {\n const { id: cohortId } = action.payload;\n const removedCohortName = state.entities[cohortId].name;\n const totalCohorts = Object.keys(state.entities).length;\n if (totalCohorts <= 1) {\n cohortsAdapter.removeAll(state);\n const defaultCohort = newCohort({\n filters: {},\n customName: DEFAULT_COHORT_NAME,\n });\n cohortsAdapter.addOne(state, defaultCohort);\n state.currentCohortId = defaultCohort.id;\n if (action?.payload.shouldShowMessage) {\n state.message = [\n `deleteCohort|${removedCohortName}|${state.currentCohortId}`,\n ];\n }\n return;\n }\n\n cohortsAdapter.removeOne(state, cohortId);\n\n // deleted the current cohort so set to the most recent cohort\n if (state.currentCohortId === cohortId) {\n const remainingIds = Object.keys(state.entities);\n state.currentCohortId = remainingIds[0];\n }\n\n if (action?.payload.shouldShowMessage) {\n state.message = [\n `deleteCohort|${removedCohortName}|${state.currentCohortId}`,\n ];\n }\n },\n // adds a filter to the cohort filter set at the given index\n updateCohortFilter: (state, action: PayloadAction<UpdateFilterParams>) => {\n const { index, field, filter } = action.payload;\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n return;\n }\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: {\n ...state.entities[currentCohortId].filters,\n [index]: {\n mode:\n state.entities[currentCohortId]?.filters[index]?.mode ?? 'and',\n root: {\n ...(state.entities[currentCohortId]?.filters[index]?.root ??\n {}),\n [field]: filter,\n },\n },\n },\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n setCohortFilter: (state, action: PayloadAction<SetFilterParams>) => {\n const { index, filters } = action.payload;\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n console.error(`no cohort with id=${currentCohortId} defined`);\n return;\n }\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: {\n ...state.entities[currentCohortId].filters,\n [index]: filters,\n },\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n setCohortIndexFilters: (\n state,\n action: PayloadAction<SetAllIndexFiltersParams>,\n ) => {\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n console.error(`no cohort with id=${currentCohortId} defined`);\n return;\n }\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: action.payload.filters,\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n\n // removes a filter to the cohort filter set at the given index\n removeCohortFilter: (state, action: PayloadAction<RemoveFilterParams>) => {\n const { index, field } = action.payload;\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n console.error(`no cohort with id=${currentCohortId} defined`);\n return;\n }\n const filters = state.entities[currentCohortId]?.filters[index]?.root;\n if (!filters) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [field]: _a, ...updated } = filters;\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: {\n ...state.entities[currentCohortId]?.filters,\n [index]: {\n mode: state.entities[currentCohortId].filters[index].mode,\n root: updated,\n },\n },\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n duplicateCohort: (state) => {\n const currentCohortId = getCurrentCohortId(state);\n const currentCohort = state.entities[currentCohortId];\n const newName = generateUniqueName(\n Object.values(state.entities),\n currentCohort.name,\n );\n const duplicatedCohort = newCohort({\n filters: { ...currentCohort.filters },\n customName: newName,\n });\n cohortsAdapter.addOne(state, {\n ...duplicatedCohort,\n counts: { ...currentCohort.counts },\n });\n state.currentCohortId = duplicatedCohort.id;\n },\n // removes all filters from the cohort filter set at the given index\n clearCohortFilters: (\n state,\n action: PayloadAction<ClearAllFilterParams>,\n ) => {\n const { index } = action.payload;\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n console.error(`no cohort with id=${currentCohortId} defined`);\n return;\n }\n const filters = state.entities[currentCohortId]?.filters[index]?.root;\n if (!filters) {\n return;\n }\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: {\n ...state.entities[currentCohortId]?.filters,\n [index]: {\n mode: 'and',\n root: {},\n },\n },\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n updateCohortCounts: (\n state,\n action: PayloadAction<Record<string, number>>,\n ) => {\n const currentCohortId = getCurrentCohortId(state);\n const currentCohort = state.entities[currentCohortId];\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n counts: {\n ...currentCohort.counts,\n ...action.payload,\n },\n },\n });\n },\n updateCohortIndexCountById: (\n state,\n action: PayloadAction<{\n index: string;\n cohortId: string;\n counts: number;\n }>,\n ) => {\n const { index, cohortId, counts } = action.payload;\n const cohort = state.entities[cohortId];\n\n cohortsAdapter.updateOne(state, {\n id: cohortId,\n changes: {\n counts: {\n ...cohort.counts,\n ...{ [index]: counts },\n },\n },\n });\n },\n setCurrentCohortId: (state, action: PayloadAction<string>) => {\n state.currentCohortId = action.payload;\n },\n /** @hidden */\n setCohortList: (state, action: PayloadAction<Cohort[]>) => {\n if (!action.payload) {\n cohortsAdapter.removeMany(state, state.ids);\n } else {\n cohortsAdapter.upsertMany(state, [...action.payload] as Cohort[]);\n }\n },\n },\n});\n\n/**\n * Returns the selectors for the cohorts EntityAdapter\n * @param state - the CoreState\n *\n * @hidden\n */\nexport const cohortSelectors = cohortsAdapter.getSelectors(\n (state: CoreState) => state.cohorts.cohortManager,\n);\n\n// Filter actions: addFilter, removeFilter, updateFilter\nexport const {\n createNewCohort,\n updateCohortFilter,\n setCohortFilter,\n setCohortIndexFilters,\n duplicateCohort,\n removeCohortFilter,\n clearCohortFilters,\n removeCohort,\n setCurrentCohortId,\n updateCohortName,\n updateCohortCounts,\n updateCohortIndexCountById,\n setCohortList,\n} = cohortManagerSlice.actions;\n\nexport const cohortReducer = cohortManagerSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport type { CoreState } from '../../reducers';\n\n// TODO: after multiple cohort support is merged move this to CohortBuilder\ntype ExpandedFiltersState = Record<string, Record<string, boolean>>;\n\nconst initialState: ExpandedFiltersState = {};\n\nconst expandSlice = createSlice({\n name: 'CohortBuilder/filterExpand',\n initialState: initialState,\n reducers: {\n toggleCohortBuilderCategoryFilter: (\n state,\n action: PayloadAction<{\n index: string;\n field: string;\n expanded: boolean;\n }>,\n ) => {\n return {\n ...state,\n [action.payload.index]: {\n ...state[action.payload.index],\n [action.payload.field]: action.payload.expanded,\n },\n };\n },\n toggleCohortBuilderAllFilters: (\n state,\n action: PayloadAction<{ index: string; expand: boolean }>,\n ) => {\n return {\n ...state,\n [action.payload.index]: Object.keys(state[action.payload.index]).reduce(\n (acc, k) => {\n acc[k] = action.payload.expand;\n return acc;\n },\n {} as Record<string, boolean>,\n ),\n };\n },\n },\n});\n\nexport const cohortBuilderFiltersExpandedReducer = expandSlice.reducer;\n\nexport const {\n toggleCohortBuilderCategoryFilter,\n toggleCohortBuilderAllFilters,\n} = expandSlice.actions;\n\nexport const selectCohortFilterExpanded = (\n state: CoreState,\n index: string,\n field: string,\n): boolean => state.cohorts.filtersExpanded?.[index]?.[field];\n\nexport const selectAllCohortFiltersCollapsed = (\n state: CoreState,\n index: string,\n): boolean =>\n index in state.cohorts.filtersExpanded\n ? Object.values(state.cohorts.filtersExpanded?.[index]).every((e) => !e)\n : false;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport type { CoreState } from '../../reducers';\nimport { CombineMode } from './types';\n\ntype CombineModeFiltersState = Record<string, Record<string, CombineMode>>;\n\nconst initialState: CombineModeFiltersState = {};\n\nconst expandSlice = createSlice({\n name: 'CohortBuilder/filterCombineMode',\n initialState: initialState,\n reducers: {\n setCohortFilterCombineMode: (\n state,\n action: PayloadAction<{\n index: string;\n field: string;\n mode: CombineMode;\n }>,\n ) => {\n return {\n ...state,\n [action.payload.index]: {\n ...state[action.payload.index],\n [action.payload.field]: action.payload.mode,\n },\n };\n },\n },\n});\n\nexport const cohortBuilderFiltersCombineModeReducer = expandSlice.reducer;\n\nexport const { setCohortFilterCombineMode } = expandSlice.actions;\n\nexport const selectCohortFilterCombineMode = (\n state: CoreState,\n index: string,\n field: string,\n): CombineMode => state.cohorts.filtersCombineMode?.[index]?.[field] ?? 'or';\n","import { createSlice, Draft, type PayloadAction } from '@reduxjs/toolkit';\nimport type { CoreState } from '../../reducers';\nimport { IndexAndField, SharedFieldMapping } from '../guppy';\n\nexport interface SharedFiltersState {\n shouldShareFilters: boolean; // if set filters will be added to all indexes when changed\n sharedFiltersMap: SharedFieldMapping; // mapping of shared filters\n}\n\nconst initialState: SharedFiltersState = {\n shouldShareFilters: false,\n sharedFiltersMap: {},\n};\n\nexport const cohortSharedFiltersSlice = createSlice({\n name: 'cohortSharedFilters',\n initialState: initialState,\n reducers: {\n setShouldShareFilters: (\n state: Draft<SharedFiltersState>,\n action: PayloadAction<boolean>,\n ) => {\n state.shouldShareFilters = action.payload;\n return state;\n },\n setSharedFilters: (\n state: Draft<SharedFiltersState>,\n action: PayloadAction<SharedFieldMapping>,\n ) => {\n state.sharedFiltersMap = action.payload;\n },\n },\n});\n\nexport const selectShouldShareFilters = (state: CoreState): boolean =>\n state.cohorts.sharedFilters.shouldShareFilters;\n\nexport const selectSharedFilters = (state: CoreState): SharedFieldMapping =>\n state.cohorts.sharedFilters.sharedFiltersMap;\n\nexport const selectSharedFiltersForFields = (\n state: CoreState,\n field: string,\n): Array<IndexAndField> =>\n state.cohorts.sharedFilters.sharedFiltersMap?.[field] ?? [field];\n\nexport const { setShouldShareFilters, setSharedFilters } =\n cohortSharedFiltersSlice.actions;\n\nexport const cohortSharedFiltersReducer = cohortSharedFiltersSlice.reducer;\n","import { combineReducers } from '@reduxjs/toolkit';\nimport { cohortReducer } from './cohortManagerSlice';\nimport { cohortBuilderFiltersExpandedReducer } from './filterExpandSlice';\nimport { cohortBuilderFiltersCombineModeReducer } from './filterCombineModeSlice';\nimport { cohortSharedFiltersReducer } from './sharedFiltersSlice';\n\nexport const cohortReducers = combineReducers({\n filtersExpanded: cohortBuilderFiltersExpandedReducer,\n filtersCombineMode: cohortBuilderFiltersCombineModeReducer,\n sharedFilters: cohortSharedFiltersReducer,\n cohortManager: cohortReducer,\n});\n","import { gen3ServicesReducer } from './features/gen3/gen3Api';\nimport { combineReducers } from '@reduxjs/toolkit';\nimport { userReducer } from './features/user/userSlice';\nimport { gen3AppReducer } from './features/gen3Apps/gen3AppsSlice';\nimport { drsHostnamesReducer } from './features/drsResolver';\nimport { modalReducer } from './features/modals/modalsSlice';\nimport { activeWorkspaceReducer } from './features/workspace/workspaceSlice';\nimport { cartReducer, cartReducerPath } from './features/cart';\nimport {\n guppyApiReducer,\n guppyApiSliceReducerPath,\n} from './features/guppy/guppyApi'; // Do not shorten\nimport {\n userAuthApiReducer,\n userAuthApiReducerPath,\n} from './features/user/userSliceRTK';\nimport { cohortReducers } from './features/cohort/reducers';\n\nexport const rootReducer = combineReducers({\n gen3Services: gen3ServicesReducer,\n user: userReducer,\n gen3Apps: gen3AppReducer,\n drsHostnames: drsHostnamesReducer,\n modals: modalReducer,\n cohorts: cohortReducers,\n activeWorkspace: activeWorkspaceReducer,\n [guppyApiSliceReducerPath]: guppyApiReducer,\n [userAuthApiReducerPath]: userAuthApiReducer,\n [cartReducerPath]: cartReducer,\n});\n\nexport type CoreState = ReturnType<typeof rootReducer>;\n","import { JSONArray, JSONObject } from '../../types';\nimport { FILE_DELIMITERS } from '../../constants';\nimport { flatten } from 'flat';\nimport Papa, { UnparseConfig } from 'papaparse';\n\n/**\n * Flattens a deep nested JSON object skipping\n * the first level to avoid potentially flattening\n * non-nested data.\n * @param {JSON} json\n */\nexport function flattenJson(json: JSONObject) {\n const flattenedJson: JSONArray = [];\n Object.keys(json).forEach((key) => {\n flattenedJson.push(flatten(json[key], { delimiter: '_' }));\n });\n return flattenedJson;\n}\n\n/**\n * Converts JSON based on a config.\n * @param {JSON} json\n * @param {Object} config\n */\nexport async function conversion(json: JSONArray, config: UnparseConfig) {\n return Papa.unparse(json, config);\n}\n\n/**\n * Converts JSON to a specified file format.\n * Defaults to JSON if file format is not supported.\n * @param {JSON} json\n * @param {string} format\n */\nexport async function jsonToFormat(\n json: JSONObject,\n format: keyof typeof FILE_DELIMITERS,\n) {\n if (Object.keys(FILE_DELIMITERS).includes(format)) {\n const flatJson = flattenJson(json);\n const data = await conversion(flatJson, {\n delimiter: FILE_DELIMITERS[format] as string,\n });\n return data;\n }\n return json;\n}\n","import { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\nexport type JSONValue =\n | string\n | number\n | boolean\n | null\n | JSONArray\n | JSONObject;\n\nexport interface JSONObject {\n [key: string]: JSONValue;\n}\n\nexport type JSONArray = JSONValue[];\n\n// type guard functions\nexport const isHistogramRangeData = (key: any): key is [number, number] => {\n return (\n Array.isArray(key) &&\n key.length === 2 &&\n key.every((item) => typeof item === 'number')\n );\n};\n\nexport const isJSONObject = (data: any): data is JSONObject => {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n};\n\nexport const isJSONValue = (data: unknown): data is JSONValue => {\n return (\n typeof data === 'string' ||\n typeof data === 'number' ||\n typeof data === 'boolean' ||\n (Array.isArray(data) && data.every(isJSONValue)) ||\n isJSONObject(data)\n );\n};\n\nexport const isJSONValueArray = (data: JSONValue): data is JSONArray => {\n return Array.isArray(data) && data.every(isJSONValue);\n};\n\nexport interface HistogramData {\n key: string | [number, number];\n count: number;\n}\n\nexport interface HistogramDataAsStringKey {\n key: string;\n count: number;\n}\n\nexport type HistogramDataArray = Array<HistogramData>;\n\nexport interface StatValues {\n count: number | null;\n min: number | null;\n max: number | null;\n avg: number | null;\n sum: number | null;\n stddev: number | null;\n median: number | null;\n p25: number | null;\n p50: number | null;\n p75: number | null;\n}\n\nexport type StatsValuesArray = Array<Partial<StatValues>>;\n\nconst isValidObject = (input: any): boolean =>\n typeof input === 'object' && input !== null;\n\nexport const isHistogramData = (data: any): data is HistogramData => {\n return isValidObject(data) && 'key' in data && 'count' in data;\n};\n\nexport const isHistogramDataArray = (input: any): input is HistogramData[] => {\n if (!isValidObject(input) || !Array.isArray(input.histogram)) {\n return false;\n }\n return input.histogram.every(isHistogramData);\n};\n\nexport interface HistogramDataCollection {\n histogram: HistogramDataArray;\n}\n\nexport const isHistogramDataCollection = (\n obj: any,\n): obj is HistogramDataCollection => {\n return (\n isValidObject(obj) && 'histogram' in obj && isHistogramData(obj.histogram)\n );\n};\n\nexport interface GuppyAggregationData {\n [key: string]: HistogramDataCollection;\n}\n\n// Type guard function for GuppyAggregationData interface\nexport const isGuppyAggregationData = (\n obj: any,\n): obj is GuppyAggregationData => {\n if (!isValidObject(obj)) return false;\n\n for (const key in obj) {\n if (!isHistogramDataCollection(obj[key])) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const isHistogramDataAnEnum = (data: unknown): data is HistogramData => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'key' in data &&\n 'count' in data &&\n typeof data.key === 'string' &&\n typeof data.count === 'number'\n );\n};\n\nexport const isStatsValue = (item: unknown): item is Partial<StatValues> => {\n if (typeof item !== 'object' || item === null) {\n return false;\n }\n\n const obj = item as Record<string, unknown>;\n\n // Check that all present properties have correct types\n const numericFields = [\n 'count',\n 'min',\n 'max',\n 'avg',\n 'sum',\n 'stddev',\n 'median',\n ];\n for (const field of numericFields) {\n if (field in obj && typeof obj[field] !== 'number') {\n return false;\n }\n }\n\n // Check percentiles structure if present\n if ('percentiles' in obj) {\n const percentiles = obj.percentiles;\n if (typeof percentiles !== 'object' || percentiles === null) {\n return false;\n }\n const pObj = percentiles as Record<string, unknown>;\n const requiredPercentiles = ['p25', 'p50', 'p75'];\n for (const p of requiredPercentiles) {\n if (p in pObj && typeof pObj[p] !== 'number') {\n return false;\n }\n }\n }\n\n return true;\n};\n\nexport const isStatsValuesArray = (data: unknown): data is StatsValuesArray => {\n return Array.isArray(data) && data.every(isStatsValue);\n};\n\nexport const isHistogramDataAArray = (\n data: any,\n): data is HistogramDataArray => {\n return Array.isArray(data) && data.every(isHistogramData);\n};\n\nexport const isHistogramDataArrayAnEnum = (data: any): boolean => {\n return Array.isArray(data) && data.every(isHistogramDataAnEnum);\n};\n\nexport const isHistogramDataArrayARange = (data: any): boolean => {\n return (\n Array.isArray(data) && data.every((item) => isHistogramRangeData(item.key))\n );\n};\n\n/**\n * Type predicate to narrow an unknown error to `FetchBaseQueryError`\n */\nexport function isFetchBaseQueryError(\n error: unknown,\n): error is FetchBaseQueryError {\n return typeof error === 'object' && error != null && 'status' in error;\n}\n\n/**\n * Type predicate to narrow an unknown error to an object with a string 'message' property\n */\nexport function isErrorWithMessage(\n error: unknown,\n): error is { message: string } {\n return (\n typeof error === 'object' &&\n error != null &&\n 'message' in error &&\n typeof (error as any).message === 'string'\n );\n}\n\ninterface ParsingError {\n status: 'PARSING_ERROR';\n originalStatus: number;\n data: string;\n error: string;\n}\n\nexport interface HttpError {\n status: number;\n data: unknown;\n}\n\nexport function isHttpStatusError(error: unknown): error is HttpError {\n return (\n typeof error === 'object' &&\n error != null &&\n 'status' in error &&\n typeof error.status === 'number'\n );\n}\n\n/**\n * Type predicate to narrow an unknown error to an object with a string 'message' property\n */\nexport function isFetchParseError(error: unknown): error is ParsingError {\n return (\n typeof error === 'object' &&\n error != null &&\n 'originalStatus' in error &&\n 'status' in error &&\n error['status'] === 'PARSING_ERROR'\n );\n}\n\nexport type AggregationsData = Record<string, HistogramDataArray>;\n\nexport type StatsData = Record<string, StatsValuesArray>;\n\n/**\n * Represents the results of a guppy aggregation query\n */\nexport interface GuppyAggregationsResponse {\n _aggregation: Record<string, AggregationsData>;\n}\n\n/**\n * Represents a manifest item.\n * @interface ManifestItem\n */\nexport interface ManifestItem {\n [k: string]: string | number | boolean | string[] | undefined;\n object_id: string;\n file_size?: number;\n file_name?: string;\n}\n\nexport interface StorageOperationResults {\n isError?: boolean;\n status: number;\n message: string;\n}\n\nexport interface DataFetchingResult<T> extends DataFetchingStatus {\n readonly data: T;\n}\n\nexport interface DataFetchingStatus {\n readonly isSuccess?: boolean;\n readonly isFetching?: boolean;\n readonly isError?: boolean;\n readonly isUninitialized?: boolean;\n readonly error?: string;\n}\n\nexport type DataFetchingHook<T> = () => DataFetchingResult<T>;\n","import {\n DownloadFromGuppyParams,\n GuppyDownloadDataParams,\n IndexAndField,\n} from './types';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { selectCSRFToken } from '../user';\nimport { coreStore } from '../../store';\nimport { convertFilterSetToGqlFilter } from '../filters';\nimport { jsonToFormat } from './conversion';\nimport { isJSONObject } from '../../types';\nimport { JSONPath } from 'jsonpath-plus';\nimport { getCookie } from 'cookies-next';\n\n/**\n * Represents a configuration for making a fetch request.\n *\n * @typedef {Object} FetchConfig\n * @property {string} method - The HTTP method to use for the request.\n * @property {Object<string, string>} headers - The headers to include in the request.\n * @property {string} body - The request body.\n */\nexport type FetchConfig = {\n method: string;\n headers: Headers;\n body: string;\n};\n\n/**\n * Prepares a URL for downloading by appending '/download' to the provided apiUrl.\n *\n * @param {string} apiUrl - The base URL to be used for preparing the download URL.\n * @returns {URL} - The prepared download URL as a URL object.\n */\nconst prepareUrl = (apiUrl: string) => `${apiUrl}/download`;\n\n/**\n * Prepares a fetch configuration object for downloading files from Guppy.\n *\n * @param {GuppyDownloadDataParams} parameters - The parameters to include in the request body.\n * @param {string} csrfToken - The CSRF token to include in the request headers.\n * @returns {FetchConfig} - The prepared fetch configuration object.\n */\nconst prepareFetchConfig = (\n parameters: GuppyDownloadDataParams,\n csrfToken?: string,\n): FetchConfig => {\n const headers: Headers = new Headers({\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken !== undefined && { 'X-CSRF-Token': csrfToken }),\n });\n\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n const accessToken = getCookie('credentials_token');\n if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);\n }\n\n return {\n method: 'POST',\n headers: headers,\n body: JSON.stringify({\n type: parameters.type,\n filter: convertFilterSetToGqlFilter(parameters.filter),\n accessibility: parameters.accessibility,\n fields: parameters?.fields,\n sort: parameters?.sort,\n }),\n };\n};\n\n/**\n * Downloads a file from Guppy using the provided parameters.\n * It will optionally convert the data to the specified format.\n *\n * @param {DownloadFromGuppyParams} parameters - The parameters to use for the download request.\n * @param onStart - The function to call when the download starts.\n * @param onDone - The function to call when the download is done.\n * @param onError - The function to call when the download fails.\n * @param onAbort - The function to call when the download is aborted.\n * @param signal - AbortSignal to use for the request.\n */\nexport const downloadFromGuppyToBlob = async ({\n parameters,\n onStart = () => null,\n onDone = (_: Blob) => null,\n onError = (_: Error) => null,\n onAbort = () => null,\n signal = undefined,\n}: DownloadFromGuppyParams) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n onStart?.();\n\n const url = prepareUrl(GEN3_GUPPY_API);\n const fetchConfig = prepareFetchConfig(parameters, csrfToken);\n\n fetch(url.toString(), {\n ...fetchConfig,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit)\n .then(async (response: Response) => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n\n let jsonData = await response.json();\n if (parameters?.rootPath && parameters.rootPath) {\n // if rootPath is provided, extract the data from the rootPath\n jsonData = JSONPath({\n json: jsonData,\n path: `$.[${parameters.rootPath}]`,\n resultType: 'value',\n });\n }\n // convert the data to the specified format and return a Blob\n let str = '';\n if (parameters.format === 'json') {\n str = JSON.stringify(jsonData);\n } else {\n const convertedData = await jsonToFormat(jsonData, parameters.format);\n if (isJSONObject(convertedData)) {\n str = JSON.stringify(convertedData, null, 2);\n } else {\n str = convertedData;\n }\n }\n return new Blob([str], {\n type: 'application/json',\n });\n })\n .then((blob) => onDone?.(blob))\n .catch((error) => {\n // Abort is handle as an exception\n if (error.name == 'AbortError') {\n // handle abort()\n onAbort?.();\n }\n onError?.(error);\n });\n};\n\nexport const downloadJSONDataFromGuppy = async ({\n parameters,\n onAbort = () => null,\n signal = undefined,\n}: DownloadFromGuppyParams) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n\n const url = prepareUrl(GEN3_GUPPY_API);\n const fetchConfig = prepareFetchConfig(parameters, csrfToken);\n\n try {\n const response = await fetch(url.toString(), {\n ...fetchConfig,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit);\n\n let jsonData = await response.json();\n if (parameters?.rootPath && parameters.rootPath) {\n // if rootPath is provided, extract the data from the rootPath\n jsonData = JSONPath({\n json: jsonData,\n path: `$.[${parameters.rootPath}]`,\n resultType: 'value',\n });\n }\n // convert the data to the specified format and return a Blob\n return jsonData;\n } catch (error: any) {\n // Abort is handle as an exception\n if (error.name == 'AbortError') {\n // handle abort()\n onAbort?.();\n }\n throw new Error(error);\n }\n};\n\nexport const groupSharedFields = (data: Record<string, string[]>) => {\n const reverseIndex: Record<string, Set<string>> = {};\n\n // Build reverse index: track which root keys contain each element\n for (const rootKey in data) {\n data[rootKey].forEach((value) => {\n if (!reverseIndex[value]) {\n reverseIndex[value] = new Set();\n }\n reverseIndex[value].add(rootKey);\n });\n }\n\n return Object.entries(reverseIndex).reduce(\n (acc, [field, indexSet]) => {\n if (indexSet.size > 1) {\n acc[field] = Array.from(indexSet).map((x) => ({\n index: x,\n field: field,\n }));\n }\n return acc;\n },\n {} as Record<string, Array<IndexAndField>>,\n );\n};\n","import { AggregationsData, StatsData } from '../../types';\nimport { JSONPath } from 'jsonpath-plus';\n\n/**\n * Processes the histogram data from the given input object and returns an aggregated data object.\n *\n * @param {Record<string, unknown>} data - The input data object containing histogram information.\n * @returns {AggregationsData} An object containing the processed histogram data, structured as key-value pairs.\n */\nexport const processHistogramResponse = <\n T extends AggregationsData | StatsData,\n>(\n data: Record<string, unknown>,\n): T => {\n const valueData = JSONPath({\n json: data,\n path: '$..histogram',\n resultType: 'value',\n });\n\n const pointerData = JSONPath({\n json: data,\n path: '$..histogram',\n resultType: 'pointer',\n });\n\n const results = pointerData.reduce(\n (acc: T, element: Record<string, any>, idx: number) => {\n const key = element\n .slice(1)\n .replace(/\\/histogram/g, '')\n .replace(/\\//g, '.');\n return {\n ...acc,\n [key]: valueData[idx],\n };\n },\n {} as T,\n );\n return results as T;\n};\n\n/**\n * Adjusts histogram data in the provided object by rounding counts below a specified minimum value.\n *\n * This function traverses the input object for histogram data and updates it such that all count values\n * falling below the defined `minValue` are set to `-1`. By default, the `minValue` is set to `100`.\n *\n * @param {Record<string, unknown>} origData - The original input data containing histogram structures to modify.\n * @param {number} [minValue=100] - The minimum value of histogram counts. Counts below this value are replaced with `-1`.\n * @returns {Record<string, unknown>} - A new object containing the modified histogram data while preserving other properties.\n */\nexport const roundHistogramResponse = (\n origData: Record<string, unknown>,\n minValue: number = 100,\n): Record<string, AggregationsData> => {\n const data = { ...origData };\n\n const pointerData = JSONPath({\n json: data,\n path: '$..histogram',\n resultType: 'pointer',\n });\n\n if (!pointerData) {\n return {};\n }\n\n if (pointerData.length === 0) {\n return {};\n }\n\n pointerData.forEach((element: Record<string, any>) => {\n const key = element.slice(1).replace(/\\//g, '.');\n const histogramData = JSONPath({\n json: data,\n path: key,\n resultType: 'value',\n });\n histogramData?.[0]?.forEach((x: any) => {\n x.count = x.count < minValue ? -1 : x.count;\n });\n });\n\n return data as Record<string, AggregationsData>;\n};\n","export const customQueryStrForField = (\n field: string,\n query: string,\n depth: number = 0,\n): string => {\n const indent = ' '.repeat(depth);\n const splittedFieldArray = field.split('.');\n const splittedField = splittedFieldArray.shift();\n\n if (splittedFieldArray.length === 0) {\n return `${indent}${splittedField} ${query}`;\n }\n\n return `${indent}${splittedField} {\n${customQueryStrForField(splittedFieldArray.join('.'), query, depth + 1)}\n${indent}}`;\n};\n\n// TODO: refactor the function below using customQueryStrForEachField and a wrapper function that passes the query\nexport const histogramQueryStrForEachField = (field: string): string => {\n const splittedFieldArray = field.split('.');\n const splittedField = splittedFieldArray.shift();\n if (splittedFieldArray.length === 0) {\n return `\n ${splittedField} {\n histogram {\n key\n count\n }\n }`;\n }\n return `\n ${splittedField} {\n ${histogramQueryStrForEachField(splittedFieldArray.join('.'))}\n }`;\n};\n\nexport const statsQueryStrForEachField = (field: string): string => {\n const splittedFieldArray = field.split('.');\n const splittedField = splittedFieldArray.shift();\n if (splittedFieldArray.length === 0) {\n return `\n ${splittedField} {\n histogram {\n count\n min\n max\n avg\n sum\n }\n }`;\n }\n return `\n ${splittedField} {\n ${statsQueryStrForEachField(splittedFieldArray.join('.'))}\n }`;\n};\n\nexport const nestedHistogramQueryStrForEachField = (\n mainField: string,\n numericAggAsText: boolean,\n) => `\n ${mainField} {\n ${numericAggAsText ? 'asTextHistogram' : 'histogram'} {\n key\n count\n missingFields {\n field\n count\n }\n termsFields {\n field\n count\n terms {\n key\n count\n }\n }\n }\n }`;\n\nexport const rawDataQueryStrForEachField = (field: string): string => {\n const splitFieldArray = field.split('.');\n const splitField = splitFieldArray.shift();\n if (splitFieldArray.length === 0) {\n return `\n ${splitField}\n `;\n }\n return `\n ${splitField} {\n ${rawDataQueryStrForEachField(splitFieldArray.join('.'))}\n }`;\n};\n","import { buildNestedFilterForOperation, FilterSet, Intersection, NumericFromTo, Operation, } from '../filters';\nimport { FromToRange } from '../../types';\n\nexport interface Range<T> {\n field: string;\n content: ReadonlyArray<{ ranges: FromToRange<T>[] }>;\n}\n\nexport const convertRangeToGql = <T = string>(range: Range<T>): string => {\n const { field, content } = range;\n const gql = content.map((content) => {\n const { ranges } = content;\n return ranges.map((range) => {\n const { from, to, fromOp, toOp } = range;\n return `${field}${fromOp}${from}${toOp}${to}`;\n });\n });\n return gql.join(' OR ');\n};\n\nexport const convertNumericFromToArrayToFilters = (\n field: string,\n range: NumericFromTo,\n isNested: boolean = true,\n): Intersection => {\n const { from, to } = range;\n return {\n operator: 'and',\n operands: [\n isNested\n ? buildNestedFilterForOperation(field, {\n operator: '>=',\n field,\n operand: from,\n })\n : { operator: '>=', field, operand: from },\n isNested\n ? buildNestedFilterForOperation(field, {\n operator: '<',\n field,\n operand: to,\n })\n : { operator: '<', field, operand: to },\n ],\n } satisfies Intersection;\n};\n\nexport const rawDataQueryStrForEachField = (field: string, asTextHistogram: boolean = false): string => {\n const splitFieldArray = field.split('.');\n const splitField = splitFieldArray.shift();\n let middleQuery: string = '';\n if (splitFieldArray.length === 0) {\n middleQuery = `${splitField} { ${asTextHistogram ? \"histogram: asTextHistogram\" : \"histogram\"} { count } }`;\n } else {\n middleQuery = `${splitField} { ${rawDataQueryStrForEachField(splitFieldArray.join('.'), asTextHistogram)} }`;\n }\n return middleQuery;\n};\n\ninterface NamedFilterRawDataParams {\n type: string;\n field: string;\n rangeName: string;\n prefix?: string;\n asTextHistogram?: boolean;\n}\n\nexport const buildAliasedNestedCountsQuery = ({\n type,\n field,\n rangeName,\n asTextHistogram = false,\n}: NamedFilterRawDataParams) => {\n const dataParams = [`filter: $${rangeName}`];\n const dataTypeLine = `${rangeName} : ${type} (accessibility: $accessibility ${dataParams}) {`;\n const processedFields = rawDataQueryStrForEachField(field, asTextHistogram);\n return `${dataTypeLine} ${processedFields} }`;\n};\n\nexport const removeKey = (\n key: string | number,\n { [key]: _, ...rest }: Record<string, Operation>,\n): Record<string, Operation> => rest;\n\nexport const buildRangeFilters = (\n field: string,\n ranges: Array<NumericFromTo>,\n filters: FilterSet,\n rangeBaseName: string,\n isNested: boolean = true,\n) => {\n return Object.entries(ranges).reduce(\n (acc: Record<string, FilterSet>, [, rangeValue], idx) => {\n acc[`${rangeBaseName}_${idx}`] = {\n mode: filters.mode,\n root: {\n ...filters.root,\n [field]: convertNumericFromToArrayToFilters(\n field,\n rangeValue,\n isNested,\n ),\n },\n } satisfies FilterSet;\n return acc;\n },\n {},\n );\n};\n\nexport const buildRangeQuery = (\n field: string,\n ranges: Array<NumericFromTo>,\n filters: FilterSet,\n rangeBaseName: string = 'range',\n index: string = 'cases',\n indexPrefix: string = '',\n isNested: boolean = true,\n asTextHistogram: boolean = false,\n) => {\n const rangeFilters = buildRangeFilters(\n field,\n ranges,\n filters,\n rangeBaseName,\n isNested\n );\n\n let query = `query rangeQuery ($accessibility: Accessibility, ${Object.keys(\n rangeFilters,\n )\n .map((rangeKey) => `$${rangeKey}: JSON`)\n .join(',')} ) { ${indexPrefix}_aggregation {`;\n Object.keys(rangeFilters).forEach((rangeKey) => {\n const rangeQuery = buildAliasedNestedCountsQuery({\n type: index,\n field,\n rangeName: rangeKey,\n asTextHistogram\n });\n query += rangeQuery + ' \\n';\n });\n\n query += `}}`;\n\n return {\n query: query,\n filters: rangeFilters,\n };\n};\n","import type { CoreState } from '../../reducers';\nimport { Cohort, CohortId } from './types';\nimport {\n EmptyFilterSet,\n FilterSet,\n IndexedFilterSet,\n Operation,\n} from '../filters';\nimport { cohortsAdapter, cohortSelectors } from './cohortManagerSlice';\n\nexport const {\n selectAll: selectAllCohorts,\n selectTotal: selectTotalCohorts,\n selectById: selectCohortById,\n selectIds: selectCohortIds,\n} = cohortsAdapter.getSelectors(\n (state: CoreState) => state.cohorts.cohortManager,\n);\n\n/**\n * Internally used selector for the exported selectora\n * @param state\n */\nconst getCurrentCohortFromCoreState = (state: CoreState): CohortId => {\n return state.cohorts.cohortManager.currentCohortId;\n};\nexport const selectCohortFilters = (state: CoreState): IndexedFilterSet => {\n const currentCohortId = getCurrentCohortFromCoreState(state);\n return state.cohorts.cohortManager.entities[currentCohortId]?.filters;\n};\nexport const selectCurrentCohortFilters = (\n state: CoreState,\n): IndexedFilterSet => {\n const currentCohortId = getCurrentCohortFromCoreState(state);\n return state.cohorts.cohortManager.entities[currentCohortId]?.filters;\n};\nexport const selectCurrentCohortId = (state: CoreState): CohortId => {\n return state.cohorts.cohortManager.currentCohortId;\n};\nexport const selectCurrentCohort = (state: CoreState): Cohort =>\n cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state));\nexport const selectCurrentCohortName = (state: CoreState): string =>\n cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state)).name;\n/**\n * Select a filter by its name from the current cohort. If the filter is not found\n * returns undefined.\n * @param state - Core\n * @param index which cohort index to select from\n * @param name name of the filter to select\n */\nexport const selectIndexedFilterByName = (\n state: CoreState,\n index: string,\n name: string,\n): Operation | undefined => {\n return cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state))\n .filters[index]?.root[name];\n};\n/**\n * Returns the cohort's name given the id\n * @param state - the CoreState\n * @param cohortId - the cohort id\n * @category Cohort\n * @category Selectors\n */\nexport const selectCohortNameById = (\n state: CoreState,\n cohortId: string,\n): string | undefined => {\n const cohort = cohortSelectors.selectById(state, cohortId);\n return cohort?.name;\n};\n\n/**\n * Returns all the cohorts in the state\n * @param state - the CoreState\n *\n * @category Cohort\n * @category Selectors\n */\n\nexport const selectAvailableCohorts = (state: CoreState): Cohort[] =>\n cohortSelectors.selectAll(state);\n/**\n * Returns if the current cohort is modified\n * @param state - the CoreState\n * @category Cohort\n * @category Selectors\n * @hidden\n */\nexport const selectCurrentCohortModified = (\n state: CoreState,\n): boolean | undefined => {\n const cohort = cohortSelectors.selectById(\n state,\n getCurrentCohortFromCoreState(state),\n );\n return cohort?.modified;\n};\n/**\n * Returns if the current cohort has been saved\n * @param state - the CoreState\n * @category Cohort\n * @category Selectors\n * @hidden\n */\nexport const selectCurrentCohortSaved = (\n state: CoreState,\n): boolean | undefined => {\n const cohort = cohortSelectors.selectById(\n state,\n getCurrentCohortFromCoreState(state),\n );\n return cohort?.saved;\n};\n/**\n * Select a filter by its name from the current cohort. If the filter is not found\n * returns undefined.\n * @param state - Core\n * @param name name of the filter to select\n */\nexport const selectAvailableCohortByName = (\n state: CoreState,\n name: string,\n): Cohort | undefined =>\n cohortSelectors\n .selectAll(state)\n .find((cohort: Cohort) => cohort.name === name);\n/**\n * Select a filter from the index.\n * returns undefined.\n * @param state - Core\n * @param index which cohort index to select from\n */\nexport const selectIndexFilters = (\n state: CoreState,\n index: string,\n): FilterSet => {\n const cohort = cohortSelectors.selectById(\n state,\n getCurrentCohortFromCoreState(state),\n );\n if (!cohort) {\n console.error('No Cohort Defined');\n }\n return cohort?.filters?.[index] ?? EmptyFilterSet;\n};\n","import {\n Equals,\n ExcludeIfAny,\n Excludes,\n Exists,\n FilterSet,\n GreaterThan,\n GreaterThanOrEquals,\n Includes,\n Intersection,\n LessThan,\n LessThanOrEquals,\n Missing,\n NestedFilter,\n NotEquals,\n Operation,\n OperationHandler,\n Union,\n} from './types';\nimport { CoreState } from '../../reducers';\nimport {\n buildNestedGQLFilter,\n convertFilterToGqlFilter,\n GQLEqual,\n GQLExcludeIfAny,\n GQLExcludes,\n GQLExists,\n GQLFilter,\n GQLGreaterThan,\n GQLGreaterThanOrEquals,\n GQLIncludes,\n GQLIntersection,\n GQLLessThan,\n GQLLessThanOrEquals,\n GQLMissing,\n GQLNestedFilter,\n GQLNotEqual,\n GQLUnion,\n handleOperation,\n isGQLIntersection,\n isGQLUnion,\n} from './filters';\n\nimport { selectIndexFilters } from '../cohort/cohortManagerSelector';\n\n/**\n * Constructs a nested operation object based on the provided field and leaf operand.\n * If the field does not contain a dot '.', it either assigns the field to the leaf operand (if applicable)\n * or returns the leaf operand as is. When the field contains dots, it splits the field into parts,\n * creates a \"nested\" operation for the root field, and recursively constructs the nested structure\n * for the remaining portion of the field.\n *\n * @param {string} field - The hierarchical field path, with segments separated by dots (e.g., \"root.child\").\n * @param {Operation} leafOperand - The operation to be nested within the specified path.\n * @param parentPath - The parent path of the current field. Guppy nested filters require a parent path.\n * @param depth\n * @returns {Operation} A nested operation object that represents the structured path and operand.\n */\nexport const buildNestedWithParentPathGQLFilter = (\n field: string,\n leafOperand: GQLFilter,\n parentPath: string | undefined = undefined,\n): GQLFilter => {\n if (!field.includes('.')) {\n return leafOperand;\n }\n\n const splitFieldArray = field.split('.');\n const nextField = splitFieldArray.shift();\n\n if (!nextField) {\n console.warn('Invalid field path:', field);\n return leafOperand;\n }\n\n const currentPath = parentPath ? `${parentPath}.${nextField}` : nextField;\n\n return {\n nested: {\n path: currentPath,\n ...buildNestedGQLFilter(\n splitFieldArray.join('.'),\n leafOperand,\n currentPath,\n ),\n },\n };\n};\n\nexport const buildCohortGqlOperator = (\n fs: FilterSet | undefined,\n): GQLFilter | undefined => {\n if (!fs || !fs.root) return undefined;\n\n const fsKeys = Object.keys(fs.root);\n // if no keys return undefined\n if (fsKeys.length === 0) return undefined;\n\n // TODO consider changing FilterSet: mode to support joinOrToAll as FilterSet mode\n // find key using keyword \"joinOrToAll\"\n const joinOrToAllKey = fsKeys.filter((x) => x.includes('joinOrToAll'));\n\n switch (fs.mode) {\n case 'and':\n if (joinOrToAllKey.length === 1) {\n const firstJoinOrToAllKey = joinOrToAllKey[0];\n\n // Remove firstJoinOrToAllKey from Array\n fsKeys.splice(fsKeys.indexOf(firstJoinOrToAllKey), 1);\n\n const firstJoinOrToAllObj = fs.root[firstJoinOrToAllKey];\n // make sure type is or/ Union\n if (firstJoinOrToAllObj.operator === 'or') {\n return {\n or: firstJoinOrToAllObj?.operands.map((orObj) => {\n // go through each or statement and add all other filters to it\n return {\n and: [\n convertFilterToNestedGqlFilter(orObj),\n ...fsKeys.map((k): GQLFilter => {\n return convertFilterToNestedGqlFilter(fs.root[k]);\n }),\n ],\n };\n }),\n };\n } else {\n console.error(\n `function buildCohortGqlOperator expecting \"or\" received \"${firstJoinOrToAllObj.operator}\" on key \"${firstJoinOrToAllKey}\"`,\n );\n }\n } else if (joinOrToAllKey.length > 1) {\n console.error(\n `function buildCohortGqlOperator expecting only one joinOrToAll received: ${joinOrToAllKey.length}`,\n fsKeys,\n );\n }\n return {\n // TODO: Replace fixed AND with cohort top level operation like Union or Intersection\n [fs.mode]: fsKeys.map((k): GQLFilter => {\n return convertFilterToGqlFilter(fs.root[k]);\n }),\n };\n case 'or':\n return {\n [fs.mode]: fsKeys.map((k): GQLFilter => {\n return convertFilterToGqlFilter(fs.root[k]);\n }),\n };\n }\n};\n\nexport const selectCurrentCohortCaseFilters = (\n state: CoreState,\n index: string = 'cases',\n): FilterSet => selectIndexFilters(state, index);\n\n/**\n * Merged two FilterSets returning the merged pair.\n * @param a - first FilterSet\n * @param b - other FilterSet\n */\nexport const joinFilters = (a: FilterSet, b: FilterSet): FilterSet => {\n return { mode: a.mode, root: { ...a.root, ...b.root } };\n};\n\nexport const convertFilterSetToOperation = (\n fs: FilterSet | undefined,\n): Operation | undefined => {\n if (!fs) return undefined;\n switch (fs.mode) {\n case 'and':\n return Object.keys(fs.root).length == 0\n ? undefined\n : {\n operator: fs.mode,\n operands: Object.keys(fs.root).map((k): Operation => {\n return fs.root[k];\n }),\n };\n }\n return undefined;\n};\n\nexport const extractContents = (\n filter: GQLFilter,\n): readonly GQLFilter[] | undefined => {\n if (isGQLUnion(filter)) {\n return filter.or;\n }\n if (isGQLIntersection(filter)) {\n return filter.and;\n }\n return undefined;\n};\n\nexport class ToGqlAllNested implements OperationHandler<GQLFilter> {\n handleEquals = (op: Equals): GQLEqual | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '=': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '=': {\n [op.field]: op.operand,\n },\n };\n };\n handleNotEquals = (op: NotEquals): GQLNotEqual | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '!=': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '!=': {\n [op.field]: op.operand,\n },\n };\n };\n handleLessThan = (op: LessThan): GQLLessThan | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '<': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '<': {\n [op.field]: op.operand,\n },\n };\n };\n handleLessThanOrEquals = (\n op: LessThanOrEquals,\n ): GQLLessThanOrEquals | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '<=': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '<=': {\n [op.field]: op.operand,\n },\n };\n };\n handleGreaterThan = (op: GreaterThan): GQLGreaterThan | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '>': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '>': {\n [op.field]: op.operand,\n },\n };\n };\n handleGreaterThanOrEquals = (\n op: GreaterThanOrEquals,\n ): GQLGreaterThanOrEquals | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '>=': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '>=': {\n [op.field]: op.operand,\n },\n };\n };\n\n handleIncludes = (op: Includes): GQLIncludes | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n in: { [leafField]: op.operands },\n }) as GQLNestedFilter;\n }\n return {\n in: {\n [op.field]: op.operands,\n },\n };\n };\n\n handleExcludes = (op: Excludes): GQLExcludes | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n exclude: { [leafField]: op.operands },\n }) as GQLNestedFilter;\n }\n return {\n exclude: {\n [op.field]: op.operands,\n },\n };\n };\n\n handleExcludeIfAny = (\n op: ExcludeIfAny,\n ): GQLExcludeIfAny | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n excludeifany: { [leafField]: op.operands },\n }) as GQLNestedFilter;\n }\n return {\n excludeifany: {\n [op.field]: op.operands,\n },\n };\n };\n\n handleIntersection = (op: Intersection): GQLIntersection => ({\n and: op.operands.map((x) =>\n convertFilterToGqlFilter(x),\n ) as ReadonlyArray<GQLFilter>,\n });\n\n handleUnion = (op: Union): GQLUnion => ({\n or: op.operands.map((x) => convertFilterToGqlFilter(x)),\n });\n\n handleMissing = (op: Missing): GQLMissing | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n is: { [leafField]: 'MISSING' },\n }) as GQLNestedFilter;\n }\n return {\n is: {\n [op.field]: 'MISSING',\n },\n };\n };\n\n handleExists = (op: Exists): GQLExists | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n not: { [leafField]: op?.operand ?? null },\n }) as GQLNestedFilter;\n }\n return {\n not: {\n [op.field]: op?.operand ?? null,\n },\n };\n };\n\n handleNestedFilter = (op: NestedFilter): GQLNestedFilter => {\n const child: GQLFilter = convertFilterToGqlFilter(op.operand);\n return {\n nested: {\n path: op.path,\n ...child,\n },\n } as GQLNestedFilter;\n };\n}\n\nexport const convertFilterToNestedGqlFilter = (\n filter: Operation,\n): GQLFilter => {\n const handler: OperationHandler<GQLFilter> = new ToGqlAllNested();\n return handleOperation(handler, filter);\n};\n\nexport const convertFilterSetToNestedGqlFilter = (\n fs: FilterSet,\n toplevelOp: 'and' | 'or' = 'and',\n): GQLFilter => {\n const fsKeys = Object.keys(fs.root);\n // if no keys return undefined\n if (fsKeys.length === 0) return { and: [] };\n\n return toplevelOp === 'and'\n ? { and: fsKeys.map((key) => convertFilterToNestedGqlFilter(fs.root[key])) }\n : { or: fsKeys.map((key) => convertFilterToNestedGqlFilter(fs.root[key])) };\n};\n","import useSWR, { Fetcher, SWRResponse } from 'swr';\nimport { AggregationsData, JSONObject, StatsData } from '../../types';\nimport { Accessibility, GEN3_GUPPY_API } from '../../constants';\nimport { convertFilterSetToGqlFilter, FilterSet, GQLFilter, isFilterEmpty, } from '../filters';\nimport { guppyApi, guppyApiSliceRequest } from './guppyApi';\nimport { RangeQueryRequest, SharedFieldMapping } from './types';\n\nimport { groupSharedFields } from './utils';\nimport { processHistogramResponse } from './processing';\nimport {\n histogramQueryStrForEachField,\n nestedHistogramQueryStrForEachField,\n rawDataQueryStrForEachField,\n statsQueryStrForEachField,\n} from './queryGenerators';\nimport { buildRangeQuery } from './range';\nimport { convertFilterSetToNestedGqlFilter } from '../filters/nestedFilters';\n\nconst statusEndpoint = '/_status';\n\nexport interface GraphQLQuery {\n query: string;\n variables?: Record<string, unknown>;\n}\n\nexport const fetchJson: Fetcher<JSONObject, string> = async (url: string) => {\n const res = await fetch(url, {\n method: 'GET',\n headers: { 'Content-type': 'application/json' },\n });\n if (!res.ok) throw new Error('An error occurred while fetching the data.');\n return (await res.json()) as JSONObject;\n};\n\nexport const useGetStatus = (): SWRResponse<JSONObject, Error> => {\n const fetcher = () => fetchJson(`${GEN3_GUPPY_API}${statusEndpoint}`);\n return useSWR('explorerStatus', fetcher);\n};\n\nexport type AggregationResponse = Record<string, JSONObject>;\n\n/*\n returns all the fields for a given type\n @param type: the type to get fields for\n @returns: a list of fields for the given type\n */\n\ninterface GuppyBaseQueryParams {\n type: string;\n filters: FilterSet;\n accessibility?: Accessibility;\n indexPrefix?: string;\n filterName?: string;\n}\n\ninterface AccessibleDataSliceParams {\n type: string;\n fields: ReadonlyArray<string>;\n accessibility: Accessibility;\n indexPrefix?: string;\n}\n\ninterface QueryAggsParams extends GuppyBaseQueryParams {\n fields: ReadonlyArray<string>;\n filterSelf?: boolean;\n queryId?: string;\n}\n\ninterface QueryForSubAggsParams extends Omit<GuppyBaseQueryParams, 'filters'> {\n mainField: string;\n numericAggAsText: boolean;\n termsFields?: ReadonlyArray<string>;\n missingFields?: ReadonlyArray<string>;\n filters?: FilterSet;\n}\n\ninterface QueryCountsParams extends GuppyBaseQueryParams {\n queryId?: string;\n}\n\ninterface QueryForFileCountSummaryParams extends GuppyBaseQueryParams {\n field: string;\n}\n\nexport interface RawDataAndTotalCountsParams extends GuppyBaseQueryParams {\n fields: string[];\n sort?: ReadonlyArray<Record<string, 'asc' | 'desc'>>;\n offset?: number;\n size?: number;\n format?: string;\n}\n\nexport const explorerTags = guppyApi.enhanceEndpoints({\n addTagTypes: ['AGGS', 'COUNTS', 'STATS', 'TABLE_DATA', 'RAW_DATA'] as const,\n});\n\n/**\n * The main endpoint used in templating Exploration page queries.\n * Includes table, filter and aggregation query types and leverages guppyApi defined in ./gupplApi.ts\n * Query templates support filters where applicable\n *\n * @param endpoints - Defines endpoints used in Exploration page:\n * @param getAllFieldsForType - A mapping query that returns all property key names vertex types specified.\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#mapping-query\n * @param getAccessibleData - An aggregation histogram counts query that filters based on access type\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#accessibility-argument-for-regular-tier-access-level\n * @param getRawDataAndTotalCounts - Queries both _totalCount for selected vertex types and\n * tabular results containing the raw data in the rows of selected vertex types\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#1-total-count-aggregation\n * @param getAggs - An aggregated histogram counts query which outputs vertex property frequencies\n * @param getSubAggs - TODO: not sure what this one does. Looks like nested aggregation\n * @param getCounts - Returns total counts of a vertex type\n * @returns: A guppy API endpoint for templating queryable data displayed on the exploration page\n */\nexport const explorerApi = explorerTags.injectEndpoints({\n endpoints: (builder) => ({\n getAllFieldsForType: builder.query({\n query: ({\n type,\n indexPrefix = '',\n }: {\n type: string;\n indexPrefix?: string;\n }) => ({\n query: `{ ${indexPrefix}_mapping ${type} } }`,\n }),\n transformResponse: (response: Record<string, any>, _meta, params) => {\n return response[params.type];\n },\n }),\n getAccessibleData: builder.query({\n query: ({\n type,\n fields,\n accessibility,\n indexPrefix = '',\n }: AccessibleDataSliceParams) => {\n const fieldParts = fields.map(\n (field) => `${field} { histogram { key count } }`,\n );\n return {\n query: `${indexPrefix}_aggregation {\n ${type} (accessibility: ${accessibility}) {\n ${fieldParts.join(',')}\n }\n }`,\n };\n },\n }),\n getRawDataAndTotalCounts: builder.query({\n query: ({\n type,\n fields,\n filters,\n sort,\n offset = 0,\n size = 20,\n accessibility = Accessibility.ALL,\n format = undefined,\n indexPrefix = '',\n filterName = 'filter',\n }: RawDataAndTotalCountsParams) => {\n const gqlFilter = convertFilterSetToGqlFilter(filters);\n const params = [\n ...(sort ? ['$sort: JSON'] : []),\n ...(gqlFilter ? [`$${filterName}: JSON`] : []),\n ...(format ? ['$format: Format'] : []),\n ].join(',');\n const queryLine = `query getRawDataAndTotalCounts (${params}) {`;\n\n const dataParams = [\n ...(format ? ['format: $format'] : []),\n ...(sort ? ['sort: $sort'] : []),\n ...(gqlFilter ? [`filter: $${filterName}`] : []),\n ].join(',');\n const dataTypeLine = `${indexPrefix}${type} (accessibility: ${accessibility}, offset: ${offset}, first: ${size},\n ${dataParams}) {`;\n\n const typeAggsLine = `${type} (${\n gqlFilter && `filter: $${filterName},`\n } accessibility: ${accessibility}) {`;\n\n const processedFields = fields.map((field) =>\n rawDataQueryStrForEachField(field),\n );\n\n const query = `${queryLine}\n ${dataTypeLine}\n ${processedFields.join(' ')}\n }\n ${indexPrefix}_aggregation {\n ${typeAggsLine}\n _totalCount\n }\n }\n }`;\n const variables = {\n ...(sort && { sort }),\n ...(gqlFilter && { filter: gqlFilter }),\n ...(format && { format }),\n };\n return { query, variables };\n },\n transformErrorResponse: () => {\n return {\n data: {\n _aggregation: [],\n },\n };\n },\n // return . separated fields as proper values\n transformResponse: (response: Record<string, any>, _meta, args) => {\n const containsDots = args?.fields?.filter((f) => f.includes('.'));\n // check if dot seperated in arry and not object\n if (containsDots && containsDots.length > 0 && response.data) {\n const containsDotsUniqueBase = containsDots.reduce((acc, field) => {\n const partsArr = field.split('.');\n if (partsArr.length < 2) {\n throw new Error(\n \"Explorer does not support field with more than one '.' separator\",\n );\n }\n const basePart = partsArr[0];\n if (!acc.includes(basePart)) {\n acc.push(basePart);\n }\n return acc;\n }, [] as string[]);\n\n // checks if api is returning an array of objects for the base part\n // if so, it restructures the object to group the sub parts into arrays\n // e.g. {a: [{b: 1, c:2}, {b:3, c:4}]} becomes {a: {b: [1,3], c:[2,4]}}\n // this is to make it easier to work with in the table component\n // currently only supports one level of nesting\n // also puts original into subRows for dropdown viewing\n const tempResponse = response.data[\n `${args?.indexPrefix ?? ''}${args.type}`\n ].map((item: Record<string, any>) => {\n const tempItem = item;\n for (let i = 0; i < containsDotsUniqueBase.length; i++) {\n const basePart = containsDotsUniqueBase[i];\n if (item[basePart] && Array.isArray(item[basePart])) {\n // move original to subRows\n tempItem.subRows = tempItem[basePart];\n\n tempItem[basePart] = tempItem[basePart].reduce(\n (acc: Record<string, any>, obj: Record<string, any>) => {\n for (const key in obj) {\n if (Object.hasOwn(obj, key)) {\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(obj[key]);\n }\n }\n return acc;\n },\n {},\n );\n }\n }\n return tempItem;\n });\n\n return {\n data: {\n _aggregation: response.data._aggregation,\n [`${args?.indexPrefix ?? ''}${args.type}`]: tempResponse,\n },\n };\n }\n return response;\n },\n providesTags: ['RAW_DATA', 'TABLE_DATA'],\n }),\n getAggs: builder.query<AggregationsData, QueryAggsParams>({\n query: ({\n type,\n fields,\n filters,\n accessibility = Accessibility.ALL,\n filterSelf = false,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryAggsParams) => {\n return buildGetAggregationQuery(\n type,\n fields,\n filters,\n accessibility,\n filterSelf,\n undefined,\n indexPrefix,\n filterName,\n );\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n const buckets = processHistogramResponse<AggregationsData>(\n response?.data?.[`${args?.indexPrefix ?? ''}_aggregation`][\n args.type\n ] ?? {},\n );\n\n // check for totals\n const count =\n response?.data?.[`${args?.indexPrefix ?? ''}_aggregation`][args.type]\n ?._totalCount ?? null;\n\n return {\n _totalCount: [{ key: args.type, count }], // add total count to allow cohorts to cache index item totals\n ...buckets,\n };\n },\n providesTags: ['AGGS'],\n }),\n getStatsAggregations: builder.query<StatsData, QueryAggsParams>({\n query: ({\n type,\n fields,\n filters,\n accessibility = Accessibility.ALL,\n filterSelf = false,\n queryId = undefined,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryAggsParams) => {\n return buildGetStatsAggregationQuery(\n type,\n fields,\n filters,\n accessibility,\n filterSelf,\n queryId,\n indexPrefix,\n filterName,\n );\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return processHistogramResponse<StatsData>(\n response?.data?.[`${args?.indexPrefix ?? ''}_aggregation`][\n args.type\n ] ?? {},\n );\n },\n providesTags: ['STATS'],\n }),\n getSubAggs: builder.query<AggregationsData, QueryForSubAggsParams>({\n query: ({\n type,\n mainField,\n termsFields = undefined,\n missingFields = undefined,\n numericAggAsText = false,\n filters = undefined,\n accessibility = Accessibility.ALL,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryForSubAggsParams) => {\n const nestedAggFields = {\n termsFields: termsFields,\n missingFields: missingFields,\n };\n\n const query = `query getSubAggs ( ${\n filters ?? `$${filterName}: JSON,`\n } $nestedAggFields: JSON) {\n ${indexPrefix}_aggregation {\n ${type} ( ${\n filters ?? `filter: $${filterName}, filterSelf: false,`\n } nestedAggFields: $nestedAggFields, accessibility: ${accessibility}) {\n _totalCounts\n ${nestedHistogramQueryStrForEachField(mainField, numericAggAsText)}\n }`;\n\n return {\n query: query,\n variables: {\n ...(filters && {\n [filterName]: convertFilterSetToGqlFilter(filters),\n }),\n nestedAggFields: nestedAggFields,\n },\n };\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return processHistogramResponse<AggregationsData>(\n response?.data?.[`${args?.indexPrefix ?? ''}_aggregation`][\n args.type\n ] ?? {},\n );\n },\n providesTags: ['AGGS'],\n }),\n\n getCounts: builder.query<number, QueryCountsParams>({\n query: ({\n type,\n filters,\n accessibility = Accessibility.ALL,\n queryId = undefined,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryCountsParams) => {\n const gqlFilters = convertFilterSetToGqlFilter(filters);\n const queryLine = `query totalCounts${queryId ? `${indexPrefix}_${queryId}` : ''} ${\n gqlFilters ? `($${filterName}: JSON)` : ''\n }{`;\n const typeAggsLine = `${type} ${\n gqlFilters ? `(filter: $${filterName}, ` : '('\n } accessibility: ${accessibility}) {`;\n\n const query = `${queryLine} ${indexPrefix}_aggregation {\n ${typeAggsLine}\n _totalCount\n }\n }\n }`;\n return {\n query: query,\n variables: {\n ...(gqlFilters && {\n [filterName]: gqlFilters,\n }),\n },\n validateStatus: (response: Record<string, any>) => {\n if (response?.errors && response.errors?.length > 0) return false;\n if (\n !response.data ||\n !response.data[`${indexPrefix ?? ''}_aggregation`]\n ) {\n return false;\n }\n if (!(type in response.data[`${indexPrefix ?? ''}_aggregation`])) {\n return false;\n }\n return true;\n },\n };\n },\n transformResponse: (\n response: Record<string, any>,\n _meta,\n args,\n ): number => {\n return (\n response?.data[`${args?.indexPrefix ?? ''}_aggregation`][args.type]\n ?._totalCount ?? 0\n );\n },\n providesTags: ['COUNTS'],\n }),\n getFieldCountSummary: builder.query<\n Record<string, any>,\n QueryForFileCountSummaryParams\n >({\n query: ({\n type,\n field,\n filters,\n accessibility = Accessibility.ALL,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryForFileCountSummaryParams) => {\n const gqlFilters = convertFilterSetToGqlFilter(filters);\n const query = `query summary ($${filterName}: JSON) {\n ${indexPrefix}_aggregation {\n ${type} (filter: $${filterName}, accessibility: ${accessibility}) {\n ${field} {\n histogram {\n sum,\n }\n }\n }\n }\n }`;\n return {\n query: query,\n variables: {\n ...(gqlFilters && {\n [filterName]: gqlFilters,\n }),\n },\n };\n },\n }),\n getFieldsForIndex: builder.query({\n query: ({\n index,\n indexPrefix = '',\n }: {\n index: string;\n indexPrefix: string | undefined;\n }) => {\n return {\n query: `{\n ${indexPrefix}_mapping { ${index} }\n }`,\n };\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return response[`${args?.indexPrefix ?? ''}_mapping`];\n },\n }),\n getSharedFieldsForIndex: builder.query<SharedFieldMapping, string[]>({\n query: (indices: string[]) => {\n return {\n query: `{\n _mapping { ${indices.join(' ')} }\n }`,\n };\n },\n transformResponse: (response: Record<string, any>) => {\n if ('_mapping' in response.data) {\n return groupSharedFields(response.data['_mapping']);\n }\n return {};\n },\n }),\n customRange: builder.query<AggregationsData, RangeQueryRequest>({\n query: ({\n filters,\n field,\n ranges,\n rangeBaseName,\n index,\n indexPrefix,\n accessibility = Accessibility.ALL,\n isNested = true,\n asTextHistogram = false,\n }: RangeQueryRequest) => {\n // remove field from FilterSet\n\n const queryData = buildRangeQuery(\n field,\n ranges,\n filters,\n rangeBaseName,\n index,\n indexPrefix,\n isNested,\n asTextHistogram,\n );\n\n const gqlFilters = Object.entries(queryData.filters).reduce(\n (acc: Record<string, GQLFilter>, [key, filter]) => {\n acc[key] = isNested\n ? convertFilterSetToNestedGqlFilter(filter)\n : convertFilterSetToGqlFilter(filter);\n return acc;\n },\n {},\n );\n return {\n query: queryData.query,\n variables: {\n accessibility,\n ...gqlFilters,\n },\n };\n },\n }),\n generalGQL: builder.query<Record<string, unknown>, guppyApiSliceRequest>({\n query: ({ query, variables }) => {\n return {\n query: query,\n variables: variables,\n };\n },\n }),\n }),\n});\n\nexport const useGetArrayTypes = () => {\n {\n const { data, error } = useGetStatus();\n if (error) {\n return {};\n }\n return data ? data['indices'] : {};\n }\n};\n\nexport const useGetIndexFields = (index: string, indexPrefix = '') => {\n const { data } = useGetFieldsForIndexQuery({\n index: index,\n indexPrefix: indexPrefix,\n });\n return data ?? [];\n};\n\nexport const buildGetAggregationQuery = (\n type: string,\n fields: ReadonlyArray<string>,\n filters: FilterSet,\n accessibility = Accessibility.ALL,\n filterSelf: boolean = false,\n queryId: string | undefined = undefined,\n indexPrefix: string = '',\n filterName: string = 'filter',\n): GraphQLQuery => {\n const queryStart = isFilterEmpty(filters)\n ? `query getAggs${queryId ? `_${queryId}` : ''} {\n ${indexPrefix}_aggregation {\n ${type} (accessibility: ${accessibility}) {`\n : `query getAggs ($${filterName}: JSON) {\n ${indexPrefix}_aggregation {\n ${type} (filter: $${filterName}, filterSelf: ${filterSelf ? 'true' : 'false'}, accessibility: ${accessibility}) { _totalCount`;\n const query = `${queryStart}\n ${fields.map((field: string) =>\n histogramQueryStrForEachField(field),\n )}\n }\n }\n }`;\n const queryBody: GraphQLQuery = {\n query: query,\n variables: { [filterName]: convertFilterSetToGqlFilter(filters) },\n };\n\n return queryBody;\n};\n\nexport const buildGetStatsAggregationQuery = (\n type: string,\n fields: ReadonlyArray<string>,\n filters: FilterSet,\n accessibility = Accessibility.ALL,\n filterSelf: boolean = false,\n queryId: string | undefined = undefined,\n indexPrefix: string = '',\n filterName: string = 'filter',\n): GraphQLQuery => {\n const queryStart = isFilterEmpty(filters)\n ? `\n query getStatsAggs${queryId ? `_${queryId}` : ''} {\n ${indexPrefix}_aggregation {\n ${type} (accessibility: ${accessibility}) {`\n : `query getStatsAggs${queryId ? `_${queryId}` : ''} ($${filterName}: JSON) {\n ${indexPrefix}_aggregation {\n ${type} (filter: $${filterName}, filterSelf: ${filterSelf ? 'true' : 'false'}, accessibility: ${accessibility}) { _totalCount`;\n const query = `${queryStart}\n ${fields.map((field: string) =>\n statsQueryStrForEachField(field),\n )}\n }\n }\n }`;\n const queryBody: GraphQLQuery = {\n query: query,\n variables: { [filterName]: convertFilterSetToGqlFilter(filters) },\n };\n\n return queryBody;\n};\n\nexport const {\n useGetRawDataAndTotalCountsQuery,\n useGetAccessibleDataQuery,\n useGetAllFieldsForTypeQuery,\n useGetAggsQuery,\n useLazyGetAggsQuery,\n useGetStatsAggregationsQuery,\n useLazyGetStatsAggregationsQuery,\n useGetSubAggsQuery,\n useGetCountsQuery,\n useLazyGetCountsQuery,\n useGetFieldCountSummaryQuery,\n useGetFieldsForIndexQuery,\n useGetSharedFieldsForIndexQuery,\n useGeneralGQLQuery,\n useLazyGeneralGQLQuery,\n useCustomRangeQuery,\n useLazyCustomRangeQuery,\n} = explorerApi;\n","import type { PayloadAction, TypedStartListening } from '@reduxjs/toolkit';\nimport { createListenerMiddleware, isAnyOf } from '@reduxjs/toolkit';\nimport { CoreDispatch } from './store';\nimport { CoreState } from './reducers';\n\nimport { updateCohortIndexCountById } from './features/cohort/cohortManagerSlice';\n\nimport { explorerApi } from './features/guppy/guppySlice';\n\n/**\n * Defines coreListeners for adding middleware.\n * used to update the current Cohort Case count\n */\n\nexport const coreStoreListenerMiddleware = createListenerMiddleware();\nexport type CoreStartListening = TypedStartListening<CoreState, CoreDispatch>;\n\nexport const startCoreListening =\n coreStoreListenerMiddleware.startListening as CoreStartListening;\n\n/**\n * When a getCounts is requested, it might be for a cohort.\n * If so, then update the cohort's counts for that index\n */\nstartCoreListening({\n matcher: isAnyOf(explorerApi.endpoints.getCounts.matchFulfilled),\n effect: async (\n action: PayloadAction<number, string, Record<any, any>>,\n listenerApi,\n ) => {\n const counts = action.payload;\n const index = action?.meta?.arg?.originalArgs?.type; // note this is the guppy index name\n const cohortId = action?.meta?.arg?.originalArgs?.queryId;\n if (cohortId && index) {\n listenerApi.dispatch(\n updateCohortIndexCountById({ index, cohortId, counts }),\n );\n }\n },\n});\n","/* eslint @typescript-eslint/no-unused-vars: 0 */\n// Credit to: https://github.com/vercel/next.js/discussions/15687\nimport createWebStorage from 'redux-persist/lib/storage/createWebStorage';\n\nconst createNoopStorage = () => {\n return {\n getItem(_key: string) {\n return Promise.resolve(null);\n },\n setItem(_key: string, value: string) {\n return Promise.resolve(value);\n },\n removeItem(_key: string) {\n return Promise.resolve();\n },\n };\n};\n\nconst storage =\n typeof window !== 'undefined'\n ? createWebStorage('local')\n : createNoopStorage();\n\nexport const sessionStorage =\n typeof window !== 'undefined'\n ? createWebStorage('session')\n : createNoopStorage();\n\nexport default storage;\n","import { GEN3_AUTHZ_API, GEN3_AUTHZ_SERVICE } from '../../constants';\nimport { AuthzResourceResponse } from './types';\n\n/**\n * Low-level helper to fetch Arborist resources for the current user.\n * Adds an Authorization header when a token is provided and normalizes the response\n * to a simple string[] of resource paths.\n *\n * token { string | null } - access token to use for authorization\n * useService { boolean } - use the arborist service endpoint instead of the public arborist API\n */\nexport async function fetchArboristResources(\n token: string | null,\n useService: boolean = false,\n): Promise<string[]> {\n const headers: Record<string, string> = {};\n\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n const url = useService\n ? `${GEN3_AUTHZ_SERVICE}/resource`\n : `${GEN3_AUTHZ_API}/resources`;\n const res = await fetch(url, { headers });\n\n if (!res.ok) {\n console.error(\n '@gen3/core:fetchArboristResources /resource failed:',\n res.status,\n await res.text(),\n );\n return [];\n }\n\n const data = (await res.json()) as AuthzResourceResponse;\n return data.resources ?? [];\n}\n","import { configureStore } from '@reduxjs/toolkit';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport { CoreState, rootReducer } from './reducers';\nimport { gen3ServicesReducerMiddleware } from './features/gen3/gen3Api';\nimport { guppyAPISliceMiddleware } from './features/guppy/guppyApi';\nimport { userAuthApiMiddleware } from './features/user/userSliceRTK';\nimport { coreStoreListenerMiddleware } from './listeners';\nimport type { PersistConfig, PersistState } from 'redux-persist';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n persistReducer,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\n\nimport type { Action, Reducer } from 'redux';\nimport storage from './storage-persist';\nimport { GEN3_COMMONS_NAME } from './server';\n\n/**\n * Update declaration of persistReducer to support redux v5\n */\ndeclare module 'redux-persist' {\n export function persistReducer<S, A extends Action = Action, P = S>(\n config: PersistConfig<S>,\n baseReducer: Reducer<S, A, P>,\n ): Reducer<\n S & { _persist: PersistState },\n A,\n P & { _persist?: PersistState }\n >;\n}\n\nconst persistConfig = {\n key: `${GEN3_COMMONS_NAME}-root`, // stored by domain name but name added for development using localhost which will share store across multiple configurations\n version: 1,\n storage,\n whitelist: ['cohorts', 'activeWorkspace', 'cart'],\n};\n\nconst persistedReducer = persistReducer(persistConfig, rootReducer);\n\nexport const setupCoreStore = (preloadedState?: Partial<CoreState>) =>\n configureStore({\n reducer: persistedReducer,\n preloadedState,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\n },\n })\n .concat(\n gen3ServicesReducerMiddleware,\n guppyAPISliceMiddleware,\n userAuthApiMiddleware,\n )\n .prepend(coreStoreListenerMiddleware.middleware), // needs to be prepended,\n });\n\nexport const coreStore = setupCoreStore();\n\nsetupListeners(coreStore.dispatch);\n\nexport type CoreDispatch = typeof coreStore.dispatch;\n\nexport type CoreStore = typeof coreStore;\n","import React, { PropsWithChildren } from 'react';\nimport { Provider } from 'react-redux';\nimport { coreStore } from './store';\nimport { persistStore } from 'redux-persist';\nimport { PersistGate } from 'redux-persist/integration/react';\n\nconst persistor = persistStore(coreStore);\n\nexport const CoreProvider: React.FC<Record<string, unknown>> = ({\n children,\n}: PropsWithChildren) => {\n return (\n <Provider store={coreStore}>\n <PersistGate loading={null} persistor={persistor}>\n {children}\n </PersistGate>\n </Provider>\n );\n};\n","import { useEffect, useRef } from 'react';\nimport { useCoreDispatch, useCoreSelector } from './hooks';\nimport { CoreState } from './reducers';\nimport { isEqual } from 'lodash';\n\nexport type UnknownJson = Record<string, unknown>;\n\nexport type DataStatus = 'uninitialized' | 'pending' | 'fulfilled' | 'rejected';\n\nexport interface Gen3Response<H = UnknownJson> {\n readonly data: H;\n readonly warnings?: Record<string, string>;\n readonly errors?: Record<string, string>;\n}\n\nexport interface UseCoreDataResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\nexport interface CoreDataSelectorResponse<T, S = DataStatus> {\n readonly data?: T;\n readonly status: S;\n readonly error?: string;\n}\n\nexport interface CoreDataSelector<T> {\n (state: CoreState): CoreDataSelectorResponse<T>;\n}\n\nexport interface FetchDataActionCreator<P, A> {\n (...params: P[]): A;\n}\n\nexport interface UseCoreDataHook<P, T> {\n (...params: P[]): UseCoreDataResponse<T>;\n}\n\nexport const usePrevious = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport const createUseCoreDataHook = <P, A, T>(\n fetchDataActionCreator: FetchDataActionCreator<P, A>,\n dataSelector: CoreDataSelector<T>,\n): UseCoreDataHook<P, T> => {\n return (...params: P[]) => {\n const coreDispatch = useCoreDispatch();\n const { data, status, error } = useCoreSelector(dataSelector);\n const action = fetchDataActionCreator(...params);\n const prevParams = usePrevious<P[]>(params);\n\n useEffect(() => {\n if (status === 'uninitialized' || !isEqual(prevParams, params)) {\n // createDispatchHook types forces the input to AnyAction, which is\n // not compatible with thunk actions. hence, the `as any` cast. ;(\n coreDispatch(action as any); // eslint-disable-line\n }\n }, [status, coreDispatch, action, params, prevParams]);\n\n return {\n data,\n error,\n isUninitialized: status === 'uninitialized',\n isFetching: status === 'pending',\n isSuccess: status === 'fulfilled',\n isError: status === 'rejected',\n };\n };\n};\n\nexport interface CoreDataValueSelector<T> {\n (state: CoreState): T;\n}\n","import { GEN3_AI_SEARCH_API } from '../../constants';\nimport { gen3Api } from '../gen3';\n\ninterface AiSearchParams {\n readonly query: string;\n}\n\ninterface AiSearchRequestParams extends AiSearchParams {\n readonly topic?: string;\n readonly conversationId?: string;\n}\n\nexport interface AiSearchResponse extends AiSearchParams {\n readonly topic: string;\n readonly conversationId: string;\n readonly response: string;\n readonly documents: {\n readonly page_content: string;\n readonly metadata: {\n readonly row: number;\n readonly source: string;\n };\n }[];\n}\n\n/**\n * returns a response from the AI search service\n * @param searchParams - the parameters for the AI search service\n * @returns the response from the AI search service\n */\nexport const aiSearchApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n askQuestion: builder.mutation<AiSearchResponse, AiSearchRequestParams>({\n query: (searchParams: AiSearchRequestParams) => ({\n url: `${GEN3_AI_SEARCH_API}/ask`,\n method: 'POST',\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: searchParams.query,\n ...(searchParams.topic ? { topic: searchParams.topic } : {}),\n ...(searchParams.conversationId ? { conversation_id: searchParams.conversationId } : {}),\n }),\n }),\n transformResponse: (data: Record<string, any>, _, arg) => {\n return {\n query: arg.query,\n response: data.response,\n topic: data.topic,\n conversationId: data.conversation_id,\n documents: data.documents,\n };\n },\n }),\n /**\n * returns the status of the AI search service\n * @returns {\n * status: string\n * timestamp: string\n * }\n */\n getAISearchStatus: builder.query<AiSearchResponse, void>({\n query: () => `${GEN3_AI_SEARCH_API}/_status`,\n }),\n getAISearchVersion: builder.query<AiSearchResponse, void>({\n query: () => `${GEN3_AI_SEARCH_API}/_version`,\n }),\n })\n});\n\n// Add more endpoints here\n\nexport const {\n useAskQuestionMutation,\n useGetAISearchStatusQuery,\n useGetAISearchVersionQuery\n} = aiSearchApi;\n","import { gen3Api } from '../gen3';\nimport { createSelector } from '@reduxjs/toolkit';\nimport {\n type AuthzMapping,\n AuthzResourceResponse,\n CreateAuthzResourceRequest,\n CreateAuthzResourceResponse,\n} from './types';\nimport { GEN3_AUTHZ_API } from '../../constants';\n\nconst TAGS = 'authz';\n\nexport const authzTags = gen3Api.enhanceEndpoints({\n addTagTypes: [TAGS],\n});\n\n/**\n * Creates the authzApi for checking arborist permissions for a selected user\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/arborist/master/docs/openapi.yaml#/auth/get_auth_mapping\n * @see https://github.com/uc-cdis/arborist/blob/master/docs/relationships.simplified.png\n * @returns: An arborist response dict of user permissions {method, service} for each resource path.\n */\nexport const authzApi = authzTags.injectEndpoints({\n endpoints: (builder) => ({\n getAuthzMappings: builder.query<AuthzMapping, void>({\n query: () => `${GEN3_AUTHZ_API}/mapping`,\n }),\n getAuthzResources: builder.query<AuthzResourceResponse, void>({\n query: () => ({\n url: `${GEN3_AUTHZ_API}/resources`,\n method: 'GET',\n }),\n }),\n createAuthzResource: builder.mutation<\n CreateAuthzResourceResponse,\n CreateAuthzResourceRequest\n >({\n query: (request) => ({\n url: `${GEN3_AUTHZ_API}/resources`,\n method: 'POST',\n body: request.data,\n }),\n invalidatesTags: [TAGS],\n }),\n }),\n});\n\nexport const {\n useGetAuthzMappingsQuery,\n useLazyGetAuthzMappingsQuery,\n useGetAuthzResourcesQuery,\n useLazyGetAuthzResourcesQuery,\n useCreateAuthzResourceMutation,\n} = authzApi;\n\nexport const selectAuthzMapping = authzApi.endpoints.getAuthzMappings.select();\n\nexport const selectAuthzMappingData = createSelector(\n selectAuthzMapping,\n (authzMapping) => authzMapping?.data ?? { mappings: [] },\n);\n","import { IDBPDatabase, openDB } from 'idb';\nimport { StorageOperationResults } from '../../../types';\nimport { getTimestamp } from '../../../utils';\nimport { StorageEntity } from '../types';\n\nexport interface CohortStorageReturnStatus<T> extends StorageOperationResults {\n data?: T;\n}\n\nexport interface CohortStorageConfig {\n databaseName: string;\n storeName: string;\n schemaVersion?: number;\n}\n\nexport class CohortStorage<\n T extends StorageEntity<K>,\n K extends string | number = string,\n> {\n private readonly databaseName: string;\n private readonly storeName: string;\n private readonly schemaVersion: number;\n\n constructor(config: CohortStorageConfig) {\n this.databaseName = config.databaseName;\n this.storeName = config.storeName;\n this.schemaVersion = config.schemaVersion || 1;\n }\n\n private getDb(): Promise<IDBPDatabase> {\n try {\n const storeName = this.storeName;\n return openDB(this.databaseName, this.schemaVersion, {\n upgrade(db) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { keyPath: 'id' });\n }\n },\n });\n } catch (error: unknown) {\n let errorMessage = 'Unknown error';\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n throw new Error(`Database initialization failed: ${errorMessage}`);\n }\n }\n\n // ===== CREATE OPERATIONS =====\n\n /**\n * Save a single cohort to the database\n */\n async saveCohort(cohort: T): Promise<StorageOperationResults> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readwrite');\n tx.objectStore(this.storeName).put(cohort);\n await tx.done;\n return { status: 200, message: 'cohort added' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 500, message: 'unable to save cohort' };\n }\n }\n\n /**\n * Save multiple cohorts in a single transaction (bulk operation)\n */\n async saveCohorts(cohorts: T[]): Promise<StorageOperationResults> {\n if (cohorts.length === 0)\n return {\n isError: true,\n status: 400,\n message: 'cannot add an empty array',\n };\n\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readwrite');\n\n // Batch all operations in a single transaction for better performance\n await Promise.all([\n ...cohorts.map((cohort) => tx.store.put({ ...cohort, saved: true })),\n tx.done,\n ]);\n return { status: 200, message: 'cohorts added' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 500, message: 'unable to save cohort' };\n }\n }\n\n // ===== READ OPERATIONS =====\n\n /**\n * Get a specific cohort by ID\n */\n async getCohort(id: K): Promise<CohortStorageReturnStatus<T>> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n const cohort = (await store.get(id)) satisfies T;\n return {\n status: 200,\n message: 'success',\n data: cohort,\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return {\n isError: true,\n status: 401,\n message: `cannot find cohort ${id}`,\n };\n }\n }\n\n /**\n * Get all cohorts from the database\n */\n async getAllCohorts(): Promise<CohortStorageReturnStatus<Record<K, T>>> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n\n const savedCohorts =\n (await store.getAll()) satisfies Array<T> as Array<T>;\n if (!savedCohorts) {\n return {\n isError: true,\n status: 500,\n message: 'no cohorts returned',\n };\n }\n const cohorts = savedCohorts.reduce(\n (acc: Record<K, T>, cohort) => {\n const { id } = cohort;\n acc[id] = cohort;\n return acc;\n },\n {} as Record<K, T>,\n );\n return {\n status: 200,\n message: 'success',\n data: cohorts,\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 401, message: 'cannot return cohorts' };\n }\n }\n\n /**\n * Search cohorts by name (case-insensitive partial match)\n */\n async searchCohortsByName(\n searchTerm: string,\n ): Promise<CohortStorageReturnStatus<Record<K, T>>> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n const allCohorts = (await store.getAll(\n this.storeName,\n )) satisfies Array<T> as Array<T>;\n\n // Filter in memory for partial name matching\n const searchLower = searchTerm.toLowerCase();\n return {\n status: 200,\n message: 'success',\n data: allCohorts\n .filter((cohort) => cohort.name.toLowerCase().includes(searchLower))\n .reduce(\n (acc: Record<K, T>, cohort) => {\n const { id } = cohort;\n acc[id] = cohort;\n return acc;\n },\n {} as Record<K, T>,\n ),\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 401, message: 'cannot find cohorts' };\n }\n }\n\n /**\n * Count total number of cohorts\n */\n async getCohortCount(): Promise<CohortStorageReturnStatus<number>> {\n try {\n const db = await this.getDb();\n const total = await db.count(this.storeName);\n return {\n status: 200,\n message: 'success',\n data: total,\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return {\n isError: true,\n status: 401,\n message: 'cannot find cohort count',\n };\n }\n }\n\n // ===== UPDATE OPERATIONS =====\n\n /**\n * Update an existing cohort (full replacement)\n */\n async updateCohort(cohort: T): Promise<StorageOperationResults> {\n try {\n const db = await this.getDb();\n\n // Verify cohort exists before updating\n const tx = db.transaction(this.storeName, 'readwrite');\n const store = tx.objectStore(this.storeName);\n const existing = await store.get(cohort.id);\n if (!existing) {\n return {\n isError: true,\n status: 401,\n message: 'cohort not found',\n };\n }\n\n const timestamp = getTimestamp();\n const updated = {\n ...existing,\n modifiedDatetime: timestamp,\n };\n\n store.put(updated);\n await tx.done;\n return { status: 200, message: 'success' };\n } catch (error: unknown) {\n let errorMessage = 'An unknown error occurred';\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n return {\n isError: true,\n status: 500,\n message: `Unable to update cohort: ${cohort.id}. Error: ${errorMessage}`,\n };\n }\n }\n\n // ===== DELETE OPERATIONS =====\n\n /**\n * Delete a specific cohort by ID\n */\n async deleteCohort(id: K): Promise<StorageOperationResults> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readwrite');\n const store = tx.objectStore(this.storeName);\n // Verify cohort exists before deleting\n const existing = await db.get(this.storeName, id);\n if (!existing) {\n return {\n isError: true,\n status: 401,\n message: 'cohort not found',\n };\n }\n\n store.delete(id);\n await tx.done;\n return { status: 200, message: `${id} deleted` };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable to delete cohort: ${id}. Error: ${errorMessage}`,\n };\n }\n }\n\n /**\n * Delete all cohorts from the database\n */\n async deleteAllCohorts(): Promise<StorageOperationResults> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readwrite');\n const store = tx.objectStore(this.storeName);\n store.clear();\n await tx.done;\n return { status: 200, message: `all cohorts deleted` };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable to delete all cohorts. Error: ${errorMessage}`,\n };\n }\n }\n\n // ===== UTILITY OPERATIONS =====\n\n /**\n * Check if a cohort exists\n */\n async cohortExists(id: K): Promise<CohortStorageReturnStatus<boolean>> {\n try {\n const db = await this.getDb();\n // Verify cohort exists before deleting\n const existing = await db.get(this.storeName, id);\n return { status: 200, message: `${id}: ${existing ? 'true' : 'false'}` };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable search for cohort. Error: ${errorMessage}`,\n };\n }\n }\n\n /**\n * Export all cohorts as JSON\n */\n async exportCohorts(): Promise<CohortStorageReturnStatus<Record<K, T>>> {\n return await this.getAllCohorts();\n }\n\n /**\n * Import cohorts from JSON data\n */\n async importCohorts(\n cohorts: T[],\n overwrite: boolean = false,\n ): Promise<void | CohortStorageReturnStatus<T>> {\n try {\n if (overwrite) {\n await this.deleteAllCohorts();\n }\n await this.saveCohorts(cohorts);\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Failed to import cohorts: ${errorMessage}`,\n };\n }\n }\n\n /**\n * Close the database connection\n */\n async close(): Promise<void> {\n try {\n const db = await this.getDb();\n db.close();\n } catch (error) {\n console.error('Failed to close database:', error);\n }\n }\n}\n","import { JSONObject } from '../../types';\n\n// represents the auth access control for a DataList\nexport interface AuthZAccess {\n version: number;\n authz: string[];\n}\n\n// Possible values of an Item: File, Additional Value, Cohort\nexport type ItemValue =\n | string\n | number\n | undefined\n | Record<string, any>\n | boolean;\n\n// Object representing an Item with its type\nexport interface ListItem {\n itemType: 'Data' | 'AdditionalData' | 'Gen3GraphQL';\n [k: string]: ItemValue;\n}\n\n/**\n * A Data item: at the minimum it will have a guid and an item type\n */\n\nexport interface FileItem extends ListItem {\n id: string; // TODO: remove id or guid\n guid?: string;\n name?: string;\n description?: string;\n type?: string;\n size?: string;\n md5sum?: string;\n url?: string;\n documentationUrl?: string;\n itemType: 'Data';\n dataset_guid?: string;\n}\n\nexport interface FileItemAPI extends Omit<FileItem, 'id'> {\n display_name?: string;\n}\n\nexport interface CohortItem extends ListItem {\n itemType: 'Gen3GraphQL';\n data: JSONObject;\n name: string;\n schemaVersion: string;\n id: string;\n}\n\nexport interface AdditionalDataItem extends ListItem {\n description?: string;\n documentationUrl?: string;\n url?: string;\n itemType: 'AdditionalData';\n name: string;\n dataset_guid?: string;\n}\n\nexport const isFileItem = (item: ListItem): item is FileItem => {\n return item && 'guid' in item;\n};\n\nexport const isAdditionalDataItem = (item: any): item is AdditionalDataItem => {\n return (item as AdditionalDataItem).itemType === 'AdditionalData'; // TODO resolve this with type from the api\n};\n\n// Type guard for CohortItem\nexport const isCohortItem = (item: any): item is CohortItem => {\n return (\n item &&\n 'data' in item &&\n 'schemaVersion' in item &&\n item.itemType === 'Gen3GraphQL'\n );\n};\n\n// Type guard for DatalistAPI\nexport const isDatalistAPI = (value: unknown): value is DatalistAPI => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const data = value as Partial<DatalistAPI>;\n\n // Check required properties in DataItemBaseData\n if (\n typeof data.name !== 'string' ||\n typeof data.created_time !== 'string' ||\n typeof data.updated_time !== 'string' ||\n typeof data.version !== 'number' ||\n typeof data.authz !== 'object' ||\n data.authz === null ||\n !Array.isArray(data.authz.authz)\n ) {\n return false;\n }\n\n // Check required properties in DatalistAsItems\n if (\n typeof data.items !== 'object' ||\n data.items === null ||\n typeof (data.items as Record<string, unknown>) !== 'object'\n ) {\n return false;\n }\n\n return true;\n};\n\nexport type DataSetMembers = Record<string, FileItem | AdditionalDataItem>;\n\n/**\n * Represents a DataSet which is created by grouping File\n * objects with the same dataset_guids\n */\nexport interface DataLibraryDataset {\n id: string;\n name?: string;\n members: DataSetMembers; // Files and Additional Information\n itemType: 'Dataset';\n}\n\nexport type DatasetOrCohort = Record<string, DataLibraryDataset | CohortItem>;\n\nexport type LibraryListItemsAPI = Record<\n string,\n FileItemAPI | AdditionalDataItem | CohortItem\n>;\n\nexport interface DatalistBase {\n name: string;\n created_time: string;\n updated_time: string;\n authz: AuthZAccess;\n version: number;\n}\n\nexport interface DatalistAsAPIItems {\n name: string;\n items: LibraryListItemsAPI;\n}\n\nexport interface LibraryListItemsGroupedByDataset {\n name: string;\n items: DatasetOrCohort; // a record of datasets and cohorts\n}\n\nexport interface DataListUpdate extends LibraryListItemsGroupedByDataset {\n id: string;\n}\n\nexport type Datalist = DatalistBase &\n LibraryListItemsGroupedByDataset & { id: string };\nexport type DatalistAPI = DatalistBase & DatalistAsAPIItems;\nexport type DatalistWithIdAPI = DatalistAPI & { id: string };\n// DataLibrary has been combined into data sets using BuildList\nexport type DataLibrary = Record<string, Datalist>;\n\n// Data Library as represented in the Storage API\nexport type DataLibraryAPI = Record<string, DatalistAPI>;\n\nexport type DataLibraryAPIResponse = {\n lists: DataLibraryAPI;\n};\n\n/**\n * Type guard for DataLibraryAPIResponse\n */\nexport const isDataLibraryAPIResponse = (\n obj: unknown,\n): obj is DataLibraryAPIResponse => {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'lists' in obj &&\n typeof (obj as DataLibraryAPIResponse).lists === 'object'\n );\n};\n\nexport interface UpdateDataLibraryListParams extends DatalistAsAPIItems {\n id: string;\n}\n\nexport enum DataLibraryStoreMode {\n ApiOnly = 'apiOnly',\n ApiAndLocal = 'apiAndLocal',\n LocalOnly = 'localOnly',\n}\n\nexport interface ExportDatasetFields {\n dataObjectField: string; // member that stores the id of the object that stores the id.\n datasetIdField: string; // member that stores the id of the \"dataset\" will default to uid\n dataObjectIdField: string; // field in data object\n dataObjectNameField?: string;\n dataObjectSizeField?: string;\n dataObjectMd5sumField?: string;\n dataObjectUrlField?: string;\n dataObjectFileTypeValue?: string;\n dataObjectFileTypeField?: string;\n}\n","import {\n AdditionalDataItem,\n CohortItem,\n DataLibrary,\n DataLibraryAPI,\n DataLibraryAPIResponse,\n DataLibraryDataset,\n Datalist,\n DatalistAPI,\n DataSetMembers,\n DatasetOrCohort,\n ExportDatasetFields,\n FileItem,\n FileItemAPI,\n isCohortItem,\n isFileItem,\n LibraryListItemsAPI,\n LibraryListItemsGroupedByDataset,\n} from './types';\nimport { parse } from 'graphql';\nimport { JSONObject } from '../../types/';\n\nconst processItem = (id: string, data: any) => {\n if (data?.type === 'AdditionalData') {\n return {\n name: data.name,\n itemType: 'AdditionalData',\n description: data?.description,\n documentationUrl: data?.documentationUrl as string,\n url: data?.url as string,\n } as AdditionalDataItem;\n }\n\n return {\n ...data,\n itemType: 'Data',\n guid: data.id,\n id: id, // TODO fix this hack\n };\n};\n\nexport const buildListItemsGroupedByDataset = (\n listData: LibraryListItemsAPI,\n): DatasetOrCohort => {\n const items: DatasetOrCohort = Object.entries(listData).reduce(\n (acc: DatasetOrCohort, [id, data]) => {\n if (data?.type === 'Gen3GraphQL') {\n const cohortData = data as CohortItem;\n acc[id] = {\n itemType: 'Gen3GraphQL',\n id: data.guid,\n schemaVersion: cohortData.schema_version,\n data: cohortData.data,\n name: data.name,\n index: cohortData.index,\n } as CohortItem;\n } else {\n // Dataset\n if (!(data?.dataset_guid && (data.dataset_guid as string) in acc)) {\n acc[data.dataset_guid as string] = {\n id: data.dataset_guid as string,\n name: '',\n members: { [id]: processItem(id, data) },\n } as DataLibraryDataset;\n } else {\n (acc[data.dataset_guid as string].members as DataSetMembers)[id] =\n processItem(id, data);\n }\n }\n return acc;\n },\n {},\n );\n\n return items;\n};\n\nexport const BuildList = (\n listId: string,\n listData: DatalistAPI,\n): Datalist | undefined => {\n if (!Object.keys(listData).includes('items')) return undefined;\n\n const items = buildListItemsGroupedByDataset(listData?.items ?? {});\n\n return {\n items: items,\n version: listData?.version ?? 0,\n created_time: listData?.created_time,\n updated_time: listData?.updated_time,\n name: listData?.name ?? listId,\n id: listId,\n authz: listData?.authz,\n };\n};\n\n/**\n * Constructs a `DataLibrary` object by transforming the input `DataLibraryAPIResponse`.\n *\n * This function takes an API response containing lists and processes each list entry.\n * It uses `BuildList` to build individual list objects for each entry in the provided data.\n * The resulting lists are accumulated and structured into a `DataLibrary` object. which\n * groups File Object by dataset_guid.\n *\n * @param {DataLibraryAPIResponse} data - The API response containing the lists to process.\n * @returns {DataLibrary} A structured `DataLibrary` object containing the processed lists.\n */\nexport const BuildLists = (data: DataLibraryAPIResponse): DataLibrary => {\n return Object.entries(data?.lists).reduce((acc, [listId, listData]) => {\n const list = BuildList(listId, listData);\n if (list) acc[listId] = list;\n return acc;\n }, {} as DataLibrary);\n};\n\n/**\n * Calculates the total number of items within a DataList object.\n *\n * @param {DataList} dataList - The DataList object to count items from.\n * @return {number} The total number of items in the DataList.\n */\nexport const getNumberOfItemsInDatalist = (dataList: Datalist): number => {\n if (!dataList?.items) return 0;\n\n return Object.values(dataList.items).reduce((count, item) => {\n if (isCohortItem(item)) {\n return count + 1;\n } else {\n return (\n count +\n Object.values(item?.members ?? {}).reduce((fileCount, x) => {\n if (isFileItem(x)) {\n return fileCount + 1;\n }\n return fileCount;\n }, 0)\n );\n }\n }, 0);\n};\n\nexport const flattenDataList = (dataList: LibraryListItemsGroupedByDataset) => {\n // convert datalist into user-data-library API for for updating.\n\n const items: LibraryListItemsAPI = Object.entries(dataList.items).reduce(\n (acc: any, [id, value]) => {\n if (isCohortItem(value)) {\n acc[id] = value;\n } else {\n return { ...acc, ...value.members }; // TODO: might need to convert this to the API version\n }\n return acc;\n },\n {},\n );\n\n return {\n name: dataList.name,\n items: items,\n };\n};\n\nexport const convertDatasetOrCohortToLibraryListItemsAPI = (\n list: DatasetOrCohort,\n): LibraryListItemsAPI => {\n const result: LibraryListItemsAPI = {};\n\n // Iterate through each entry in the DatasetOrCohort object\n Object.entries(list).forEach(([datasetId, item]) => {\n if (isCohortItem(item)) {\n // Handle cohort items\n result[datasetId] = {\n itemType: 'Gen3GraphQL',\n id: item.id,\n schemaVersion: item.schemaVersion,\n data: item.data,\n name: item.name,\n index: item.index,\n } satisfies CohortItem;\n } else {\n // Handle dataset items\n const members = item.members || {};\n\n // Process each member of the dataset\n Object.entries(members).forEach(([memberId, memberData]) => {\n if (isFileItem(memberData)) {\n result[memberId] = {\n ...(memberData.guid && { guid: memberData.guid }),\n ...(memberData.name && { name: memberData.name }),\n ...(memberData.name && { name: memberData.name }),\n ...(memberData.description && {\n description: memberData.description,\n }),\n ...(memberData.type && { type: memberData.type }),\n dataset_guid: datasetId,\n } satisfies FileItemAPI;\n } else if (memberData.itemType === 'AdditionalData') {\n // Handle additional data items\n result[memberId] = {\n itemType: 'AdditionalData',\n name: memberData.name,\n description: memberData.description,\n documentationUrl: memberData.documentationUrl,\n url: memberData.url,\n dataset_guid: datasetId,\n } as AdditionalDataItem;\n }\n });\n }\n });\n\n return result;\n};\n\nexport const convertDataLibraryToDataLibraryAPI = (\n dataLibrary: DataLibrary,\n): DataLibraryAPI => {\n const result: DataLibraryAPI = {};\n Object.entries(dataLibrary).forEach(([listId, list]) => {\n result[listId] = {\n name: list.name,\n items: convertDatasetOrCohortToLibraryListItemsAPI(list.items),\n version: list.version,\n created_time: list.created_time,\n updated_time: list.updated_time,\n authz: list.authz,\n };\n });\n return result;\n};\n\nexport const extractIndexFromDataLibraryCohort = (query: JSONObject) => {\n try {\n const parsedQuery = parse(query['query'] as string);\n const aggregationField = parsedQuery.definitions\n .filter((def) => def.kind === 'OperationDefinition')\n .flatMap((def) => def.selectionSet.selections)\n .find((sel) => sel.kind === 'Field' && sel.name.value === '_aggregation');\n\n if (aggregationField && 'selectionSet' in aggregationField) {\n const indexField = aggregationField?.selectionSet?.selections.find(\n (sel) => sel.kind === 'Field',\n );\n return indexField ? indexField.name.value : null;\n }\n } catch (error) {\n console.error('Invalid GraphQL query:', error);\n }\n return null;\n};\n\n/**\n * Takes a list of file items from anb array of manifest entries\n * and creates an Object of Files grouped by their dataset guid, which is\n * used to add these to a Data Library List\n * @param data\n * @param dataFieldMapping\n * @constructor\n */\nexport const extractFileDatasetsInRecords = (\n data: Array<Record<string, any>>,\n dataFieldMapping: ExportDatasetFields,\n) => {\n const items: LibraryListItemsAPI = data.reduce(\n (acc: DatasetOrCohort, resource: Record<string, any>) => {\n const dataObjects = resource[dataFieldMapping.dataObjectField];\n\n // Check if dataObjects exists and is an array\n if (!dataObjects || !Array.isArray(dataObjects)) {\n return acc;\n }\n\n const datasetId = resource[dataFieldMapping.datasetIdField] as string;\n if (datasetId === undefined) {\n return acc; // Skip if dataset ID is missing\n }\n\n const datafiles = dataObjects.reduce(\n (dataAcc: DatasetOrCohort, dataObject: Record<string, unknown>) => {\n const fileId = dataObject[dataFieldMapping.dataObjectIdField];\n\n // Skip items without a valid ID\n if (typeof fileId !== 'string' || !fileId) {\n return dataAcc;\n }\n\n const name =\n (dataObject[\n dataFieldMapping?.dataObjectNameField ?? 'name'\n ] as string) ?? 'No Name';\n const size =\n dataObject[dataFieldMapping?.dataObjectSizeField ?? 'size'];\n let sizeString = 'N/A';\n if (typeof size === 'number') {\n sizeString = size.toString();\n }\n if (typeof size === 'string') {\n sizeString = size;\n }\n const md5Sum =\n (dataObject[\n dataFieldMapping?.dataObjectMd5sumField ?? 'md5sum'\n ] as string) ?? 'N/A';\n const url =\n (dataObject[\n dataFieldMapping?.dataObjectUrlField ?? 'url'\n ] as string) ?? 'N/A';\n\n let fileType = 'GA4GH_DRS';\n if (dataFieldMapping?.dataObjectFileTypeValue)\n fileType = dataFieldMapping.dataObjectFileTypeValue;\n\n if (dataFieldMapping?.dataObjectFileTypeField)\n fileType = dataObject[\n dataFieldMapping?.dataObjectFileTypeField\n ] as string;\n\n return {\n ...dataAcc,\n [fileId]: {\n dataset_guid: datasetId as string,\n id: fileId,\n guid: fileId,\n itemType: 'Data',\n name: name,\n size: sizeString,\n md5sum: md5Sum,\n type: fileType,\n url: url,\n } satisfies FileItem,\n };\n },\n {},\n );\n\n return {\n ...acc,\n ...datafiles,\n };\n },\n {} as DataSetMembers,\n );\n\n return items;\n};\n","import { IDBPDatabase, openDB } from 'idb';\nimport { ReturnStatus, StorageService } from './types';\nimport {\n DataLibraryAPI,\n DatalistAPI,\n DatalistAsAPIItems,\n DatalistWithIdAPI,\n isDatalistAPI,\n} from '../types';\nimport { BuildLists } from '../utils';\nimport { isJSONObject, JSONObject } from '../../../types';\nimport { nanoid } from '@reduxjs/toolkit';\nimport { getTimestamp } from '../../../utils';\n\nconst DATABASE_NAME = 'Gen3DataLibrary';\nconst STORE_NAME = 'DataLibraryLists';\n\nexport class LocalStorageService implements StorageService {\n private getDb(): Promise<IDBPDatabase> {\n return openDB(DATABASE_NAME, 1, {\n // TODO add more complete upgrade\n upgrade(db) {\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME, { keyPath: 'id' });\n }\n },\n });\n }\n\n setAllLists = async (\n data: Array<DatalistAsAPIItems>,\n ): Promise<ReturnStatus> => {\n const timestamp = getTimestamp();\n const allLists = data.reduce((acc: JSONObject, x: unknown) => {\n if (!isJSONObject(x)) return acc;\n\n const id = nanoid(10);\n acc[id] = {\n ...(x as JSONObject),\n version: 0,\n created_time: timestamp,\n updated_time: timestamp,\n creator: '{{subject_id}}',\n authz: {\n version: 0,\n authz: [`/users/{{subject_id}}/user-library/lists/${id}`],\n },\n };\n return acc;\n }, {} as JSONObject);\n\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n for (const [id, list] of Object.entries(allLists)) {\n tx.objectStore(STORE_NAME).put({ id, ...(list as object) });\n }\n await tx.done;\n return { status: 200, message: 'success' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 500, message: 'unable to add lists' };\n }\n };\n\n async getList(id: string): Promise<ReturnStatus> {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readonly');\n const store = tx.objectStore(STORE_NAME);\n const lists = (await store.get(id)) as DatalistAPI;\n if (lists) {\n return {\n status: 200,\n message: 'success',\n lists: {\n [id]: {\n id: id,\n ...lists,\n items: lists.items as any,\n },\n },\n };\n } else {\n return { isError: true, status: 500, message: `${id} does not exist` };\n }\n }\n\n async getLists(): Promise<ReturnStatus> {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readonly');\n const store = tx.objectStore(STORE_NAME);\n\n const lists = (await store.getAll()) as Array<DatalistWithIdAPI>;\n if (!lists) {\n return {\n isError: true,\n status: 500,\n message: 'no lists returned',\n };\n }\n const listMap = lists.reduce((acc: DataLibraryAPI, x) => {\n const { id } = x;\n acc[id] = x;\n return acc;\n }, {});\n const datalists = BuildLists({ lists: listMap });\n return {\n status: 200,\n message: 'success',\n lists: datalists,\n };\n }\n\n async addList(list: DatalistAsAPIItems): Promise<ReturnStatus> {\n const timestamp = getTimestamp();\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const id = nanoid(); // Create an id for the list\n tx.objectStore(STORE_NAME).put({\n id,\n version: 0,\n items: list?.items ?? {},\n creator: '{{subject_id}}',\n authz: {\n version: 0,\n authz: [`/users/{{subject_id}}/user-library/lists/${id}`],\n },\n name: list?.name ?? 'New List',\n created_time: timestamp,\n updated_time: timestamp,\n });\n await tx.done;\n return { status: 200, message: 'list added' };\n } catch (_error: unknown) {\n return {\n isError: true,\n status: 500,\n message: `unable to add list ${list?.name ?? 'New List'}`,\n };\n }\n }\n\n async updateList(\n id: string,\n update: DatalistAsAPIItems,\n ): Promise<ReturnStatus> {\n const { name, items } = update;\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n const listData = await store.get(id);\n\n if (!listData) {\n throw new Error(`List ${id} does not exist`);\n }\n\n const timestamp = getTimestamp();\n const version = listData.version ? listData.version + 1 : 0;\n const updated = {\n ...listData,\n ...{ name, items },\n version: version,\n updated_time: timestamp,\n created_time: listData.created_time,\n };\n\n store.put(updated);\n await tx.done;\n return { status: 200, message: 'success' };\n } catch (error: unknown) {\n let errorMessage = 'An unknown error occurred';\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n return {\n isError: true,\n status: 500,\n message: `Unable to update list: ${id}. Error: ${errorMessage}`,\n };\n }\n }\n\n async deleteList(id: string): Promise<ReturnStatus> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n const item = await store.get(id);\n\n if (!item) {\n throw new Error(`List ${id} does not exist`);\n }\n\n store.delete(id);\n await tx.done;\n return { status: 200, message: `${id} deleted` };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable to delete list: ${id}. Error: ${errorMessage}`,\n };\n }\n }\n async clearLists(): Promise<ReturnStatus> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n tx.objectStore(STORE_NAME).clear();\n await tx.done;\n return { status: 200, message: 'list cleared' };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable to clear library. Error: ${errorMessage}`,\n };\n }\n }\n\n async cacheLists(data: DataLibraryAPI): Promise<ReturnStatus> {\n if (!data || typeof data !== 'object') {\n return {\n isError: true,\n status: 500,\n message: 'Invalid or missing lists property in request',\n };\n }\n\n const allLists = Object.entries(data).reduce(\n (acc, [id, x]) => {\n if (!isDatalistAPI(x)) return acc;\n\n acc[id] = {\n ...x,\n };\n return acc;\n },\n {} as Record<string, DatalistAPI>,\n );\n\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n for (const [id, list] of Object.entries(allLists)) {\n tx.objectStore(STORE_NAME).put({ id, ...(list as object) });\n }\n await tx.done;\n return { status: 200, message: 'success' };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 200,\n message: `unable to cache library to local storage. Error: ${errorMessage}`,\n };\n }\n }\n\n async cacheList(id: string, data: DatalistAPI): Promise<ReturnStatus> {\n if (!data || typeof data !== 'object') {\n return {\n isError: true,\n status: 500,\n message: 'Invalid or missing lists property in request',\n };\n }\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n tx.objectStore(STORE_NAME).put({ id: id, ...(data as object) });\n await tx.done;\n return { status: 200, message: 'success' };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `unable to clear library. Error: ${errorMessage}`,\n };\n }\n }\n}\n","import {\n fetchJSONDataFromURL,\n HTTPError,\n HTTPErrorMessages,\n HttpMethod,\n} from '../../../utils/fetch';\nimport { GEN3_DATA_LIBRARY_API } from '../../../constants';\nimport { ReturnStatus, StorageService } from './types';\nimport {\n isDataLibraryAPIResponse,\n DataLibrary,\n DatalistAsAPIItems,\n} from '../types';\nimport { BuildLists } from '../utils';\n\ninterface FetchJSONResponse {\n data?: unknown;\n error?: {\n status: number;\n message: string;\n };\n}\n\nexport const fetchFromDataLibraryAPI = async (\n url: string,\n method: HttpMethod = HttpMethod.GET,\n body: unknown = undefined,\n): Promise<FetchJSONResponse> => {\n try {\n return {\n data: await fetchJSONDataFromURL(url, true, method, body),\n };\n } catch (error: unknown) {\n if (error instanceof HTTPError) {\n return {\n error: {\n status: error.status,\n message:\n error.responseData?.message ||\n error.responseData?.detail ||\n HTTPErrorMessages[error.status] ||\n 'No HTTP Error Message',\n },\n };\n } else {\n return {\n error: {\n status: 500,\n message: 'Unknown Error',\n },\n };\n }\n }\n};\n\nconst responseFromMutation = <T = DataLibrary>(\n responseReceived: FetchJSONResponse,\n): ReturnStatus<T> => {\n if (responseReceived.error) {\n return {\n isError: true,\n ...responseReceived.error,\n };\n }\n return {\n lists: responseReceived.data as unknown as T,\n message: 'success',\n status: 200,\n };\n};\n\nexport class APIStorageService implements StorageService<DataLibrary> {\n private readonly apiBaseUrl: string;\n private pendingRequests: Map<string, Promise<FetchJSONResponse>> = new Map();\n\n constructor(apiBaseUrl = `${GEN3_DATA_LIBRARY_API}`) {\n this.apiBaseUrl = apiBaseUrl;\n }\n\n private async dedupedRequest(\n url: string,\n method: HttpMethod = HttpMethod.GET,\n body: unknown = undefined,\n ): Promise<FetchJSONResponse> {\n // Create a unique key for this request\n const requestKey = `${method}:${url}:${body ? JSON.stringify(body) : ''}`;\n\n // If this exact request is already in progress, return the pending promise\n if (this.pendingRequests.has(requestKey)) {\n return this.pendingRequests.get(requestKey)!;\n }\n\n // Otherwise, make the request and store the promise\n const requestPromise = fetchFromDataLibraryAPI(url, method, body);\n this.pendingRequests.set(requestKey, requestPromise);\n\n try {\n // Wait for the request to complete\n const result = await requestPromise;\n return result;\n } finally {\n // Remove the request from pending requests after it completes\n this.pendingRequests.delete(requestKey);\n }\n }\n\n async getLists(): Promise<ReturnStatus> {\n const { data, error } = await this.dedupedRequest(`${this.apiBaseUrl}`);\n if (error) {\n return {\n isError: true,\n ...error,\n };\n }\n if (data && isDataLibraryAPIResponse(data)) {\n const datalists = BuildLists(data);\n return {\n lists: datalists,\n status: 200,\n message: 'success',\n };\n }\n return { lists: {}, status: 200, message: 'no list returned' };\n }\n\n async addList(list: DatalistAsAPIItems): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n `${this.apiBaseUrl}`,\n HttpMethod.PUT,\n JSON.stringify({\n lists: [list],\n }),\n );\n\n return responseFromMutation(response);\n }\n\n async updateList(\n id: string,\n list: DatalistAsAPIItems,\n ): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n `${this.apiBaseUrl}/${id}`,\n HttpMethod.PUT,\n JSON.stringify(list),\n );\n return responseFromMutation(response);\n }\n\n async deleteList(id: string): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n `${this.apiBaseUrl}/${id}`,\n HttpMethod.DELETE,\n );\n\n return responseFromMutation(response);\n }\n\n async clearLists(): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n this.apiBaseUrl,\n HttpMethod.DELETE,\n );\n return responseFromMutation(response);\n }\n\n async setAllLists(lists: Array<DatalistAsAPIItems>): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n this.apiBaseUrl,\n HttpMethod.POST,\n JSON.stringify({ lists: Object.values(lists) }),\n );\n return responseFromMutation(response);\n }\n\n async getList(id: string): Promise<ReturnStatus<DataLibrary>> {\n const { data, error } = await fetchFromDataLibraryAPI(\n `${this.apiBaseUrl}/${id}`,\n );\n\n if (error) {\n return {\n isError: true,\n ...error,\n };\n }\n if (isDataLibraryAPIResponse(data)) {\n const datalists = BuildLists(data);\n return {\n lists: datalists,\n status: 200,\n message: 'success',\n };\n }\n return {\n isError: true,\n status: 500,\n message: `Unknown error getting list ${id}`,\n };\n }\n}\n","import { ReturnStatus, StorageService } from './types';\nimport { DatalistAsAPIItems } from '../types';\nimport { LocalStorageService } from './LocalStorageService';\nimport { APIStorageService } from './APIStorageService';\nimport { convertDataLibraryToDataLibraryAPI } from '../utils';\n\nexport class CachedAPIService implements StorageService {\n private localStorageDataLibrary: LocalStorageService;\n private apiDataLibrary: APIStorageService;\n constructor() {\n this.localStorageDataLibrary = new LocalStorageService(); // always update local storage\n this.apiDataLibrary = new APIStorageService();\n }\n\n async getLists(): Promise<ReturnStatus> {\n // do a network request to get the library\n // get the remote list\n const apiResults = await this.apiDataLibrary.getLists();\n\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n\n const dataLibrary = convertDataLibraryToDataLibraryAPI(\n apiResults?.lists ?? {},\n );\n await this.localStorageDataLibrary.cacheLists(dataLibrary);\n return apiResults;\n }\n\n async getList(id: string): Promise<ReturnStatus> {\n return await this.localStorageDataLibrary.getList(id);\n }\n\n async getCachedLists(id: string): Promise<ReturnStatus> {\n return await this.localStorageDataLibrary.getList(id);\n }\n\n async setAllLists(lists: Array<DatalistAsAPIItems>): Promise<ReturnStatus> {\n const apiResults = await this.apiDataLibrary.setAllLists(lists);\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n const dataLibrary = convertDataLibraryToDataLibraryAPI(\n apiResults?.lists ?? {},\n );\n await this.localStorageDataLibrary.cacheLists(dataLibrary);\n\n return apiResults;\n }\n\n async addList(list: DatalistAsAPIItems): Promise<ReturnStatus> {\n // update the API list\n const apiResults = await this.apiDataLibrary.addList(list);\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n const cacheResults = await this.localStorageDataLibrary.addList(list);\n return {\n ...cacheResults,\n lists: undefined,\n };\n }\n\n async updateList(\n id: string,\n list: DatalistAsAPIItems,\n ): Promise<ReturnStatus> {\n const apiResults = await this.apiDataLibrary.updateList(id, list);\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n\n return await this.localStorageDataLibrary.cacheList(\n id,\n (apiResults.lists as any) ?? {},\n );\n }\n\n async deleteList(id: string): Promise<ReturnStatus> {\n const apiResults = await this.apiDataLibrary.deleteList(id);\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n return await this.localStorageDataLibrary.deleteList(id);\n }\n\n async clearLists(): Promise<ReturnStatus> {\n const apiResults = await this.apiDataLibrary.clearLists();\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n return await this.localStorageDataLibrary.clearLists();\n }\n}\n","import { ReturnStatus, StorageService } from './types';\nimport { DataLibraryStoreMode, DatalistAsAPIItems } from '../types';\nimport { LocalStorageService } from './LocalStorageService';\nimport { APIStorageService } from './APIStorageService';\nimport { CachedAPIService } from './CachedAPIStorageService';\n\nexport class DataLibraryStorageService implements StorageService {\n private storageService: StorageService;\n\n constructor(mode: DataLibraryStoreMode = DataLibraryStoreMode.ApiOnly) {\n if (mode === DataLibraryStoreMode.ApiOnly) {\n this.storageService = new APIStorageService();\n } else if (mode === DataLibraryStoreMode.ApiAndLocal)\n this.storageService = new CachedAPIService();\n else this.storageService = new LocalStorageService();\n }\n\n async setStorageMode(mode: DataLibraryStoreMode) {\n if (mode === DataLibraryStoreMode.ApiOnly) {\n this.storageService = new APIStorageService();\n } else if (mode === DataLibraryStoreMode.ApiAndLocal)\n this.storageService = new CachedAPIService();\n else this.storageService = new LocalStorageService();\n }\n\n // private async syncApiAndLocal() {\n // const { lists: localData, isError: localError } =\n // await this.localStorageDataLibrary.getLists();\n // const { lists: apiData, isError: apiError } =\n // await this.apiDataLibrary.getLists();\n //\n // if (localError || apiError) {\n // return;\n // }\n //\n // const mergedData: Record<string, Datalist> = { ...localData };\n //\n // // First, update any existing items with newer versions from API\n // Object.values(apiData?.lists ?? {}).forEach((apiList) => {\n // const id = apiList.id as keyof DataLibrary;\n // const localList = localData?.[id];\n // if (\n // !localList ||\n // storage Date(apiList.updatedTime) > storage Date(localList.updatedTime)\n // ) {\n // mergedData[id] = apiList;\n // }\n // });\n //\n // // Push local-only changes to API\n // const syncPromises: Promise<any>[] = [];\n //\n // for (const [id, localList] of Object.entries(localData?.lists ?? {})) {\n // if (!apiData?.[id]) {\n // // This list exists locally but not in API, so push it to API\n // syncPromises.push(this.apiDataLibrary.addList(localList));\n // } else if (\n // storage Date(localList.updatedTime) > storage Date(apiData[id].updatedTime)\n // ) {\n // // Local list is newer than API, so update API\n // syncPromises.push(this.apiDataLibrary.updateList(localList));\n // }\n // }\n //\n // // Wait for all API operations to complete\n // await Promise.all(syncPromises);\n // await this.localStorageDataLibrary.cacheLists({ lists: mergedData });\n // }\n\n async getLists(): Promise<ReturnStatus> {\n return await this.storageService.getLists();\n }\n\n async getList(id: string): Promise<ReturnStatus> {\n return await this.storageService.getList(id);\n }\n\n async getCachedLists(id: string): Promise<ReturnStatus> {\n return await this.storageService.getList(id);\n }\n\n async setAllLists(lists: Array<DatalistAsAPIItems>): Promise<ReturnStatus> {\n return await this.storageService.setAllLists(lists ?? {});\n }\n\n async addList(list: DatalistAsAPIItems): Promise<ReturnStatus> {\n return await this.storageService.addList(list);\n }\n\n async updateList(\n id: string,\n list: DatalistAsAPIItems,\n ): Promise<ReturnStatus> {\n return await this.storageService.updateList(id, list);\n }\n\n async deleteList(id: string): Promise<ReturnStatus> {\n return await this.storageService.deleteList(id);\n }\n\n async clearLists(): Promise<ReturnStatus> {\n return await this.storageService.clearLists();\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport {\n DataLibrary,\n DataLibraryStoreMode,\n Datalist,\n DataListUpdate,\n DatasetOrCohort,\n LibraryListItemsGroupedByDataset,\n} from './types';\nimport {\n convertDatasetOrCohortToLibraryListItemsAPI,\n flattenDataList,\n} from './utils';\nimport { DataLibraryStorageService } from './storage/DataLibraryStorageService';\nimport { StorageOperationResults } from '../../types';\n\nconst EMPTY_LIST: Datalist = {\n items: {},\n version: 0,\n created_time: 'not_set',\n updated_time: 'not_set',\n name: '',\n id: '',\n authz: {\n version: -1,\n authz: [],\n },\n};\n\ninterface UseDataLibraryOptions {\n storageMode: DataLibraryStoreMode;\n}\n\ninterface UseDataLibraryResult {\n dataLibrary: DataLibrary; // the current contents of the DataLibrary\n isLoading: boolean; // Loading all lists\n isUpdating: string | null; // single list update will contain ListId if updating\n error: StorageOperationResults | null; // null if there is no error\n addListToDataLibrary: (\n items: DatasetOrCohort,\n name?: string,\n ) => Promise<StorageOperationResults>;\n updateListInDataLibrary: (\n payload: DataListUpdate,\n ) => Promise<StorageOperationResults>;\n deleteListFromDataLibrary: (id: string) => Promise<StorageOperationResults>;\n clearLibrary: () => Promise<StorageOperationResults>;\n setAllListsInDataLibrary: (\n data: Array<LibraryListItemsGroupedByDataset>,\n ) => Promise<StorageOperationResults>;\n getDatalist: (id: string) => Datalist;\n}\n\nconst DEFAULT_LIST_NAME = 'List';\n\nconst useDataLibrary = (\n options: UseDataLibraryOptions = {\n storageMode: DataLibraryStoreMode.ApiOnly,\n },\n): UseDataLibraryResult => {\n // State management\n const [isLoading, setIsLoading] = useState(false);\n const [isUpdating, setIsUpdating] = useState<string | null>(null);\n const [error, setError] = useState<StorageOperationResults | null>(null);\n const [lists, setLists] = useState<DataLibrary>({});\n\n // Refs\n const hasInitializedRef = useRef(false);\n\n // Services\n const storage = useRef(\n new DataLibraryStorageService(options.storageMode),\n ).current;\n\n const refreshLists = useCallback(async () => {\n const results = await storage.getLists();\n if (results.isError) {\n setError(results);\n return results;\n }\n\n setLists(results.lists ?? {});\n setError(null);\n return results;\n }, [storage]);\n\n const applyOperationResult = useCallback(\n async (result: StorageOperationResults) => {\n if (result.isError) {\n setError(result);\n return;\n }\n await refreshLists();\n },\n [refreshLists],\n );\n\n const runOperation = useCallback(\n async (\n operation: () => Promise<StorageOperationResults>,\n updatingId?: string,\n ) => {\n setError(null);\n\n if (updatingId) setIsUpdating(updatingId);\n else setIsLoading(true);\n\n const result = await operation();\n await applyOperationResult(result);\n\n if (updatingId) setIsUpdating(null);\n else setIsLoading(false);\n\n return result;\n },\n [applyOperationResult],\n );\n\n const createUniqueListName = useCallback(\n (preferredName: string = DEFAULT_LIST_NAME) => {\n const existingNames = new Set(Object.values(lists).map((x) => x.name));\n\n if (!existingNames.has(preferredName)) return preferredName;\n\n let counter = 1;\n let candidate = `${preferredName} ${counter}`;\n while (existingNames.has(candidate)) {\n counter += 1;\n candidate = `${preferredName} ${counter}`;\n }\n return candidate;\n },\n [lists],\n );\n\n // Lifecycle effects\n useEffect(() => {\n const initialize = async () => {\n if (hasInitializedRef.current) return;\n\n setError(null);\n setIsLoading(true);\n\n await refreshLists();\n\n setIsLoading(false);\n hasInitializedRef.current = true;\n };\n\n void initialize();\n }, [refreshLists]);\n\n // CRUD operations\n const addListToDataLibrary = useCallback(\n async (items: DatasetOrCohort, name?: string) => {\n const apiItems = convertDatasetOrCohortToLibraryListItemsAPI(items);\n const payload = {\n items: apiItems,\n name: createUniqueListName(name ?? DEFAULT_LIST_NAME),\n };\n\n return runOperation(() => storage.addList(payload));\n },\n [createUniqueListName, runOperation, storage],\n );\n\n const updateListInDataLibrary = useCallback(\n async (payload: DataListUpdate) => {\n const flattened = flattenDataList(payload);\n\n return runOperation(\n () =>\n storage.updateList(payload.id, {\n name: payload.name,\n items: flattened.items,\n }),\n payload.id,\n );\n },\n [runOperation, storage],\n );\n\n const deleteListFromDataLibrary = useCallback(\n async (id: string) => runOperation(() => storage.deleteList(id)),\n [runOperation, storage],\n );\n\n const clearLibrary = useCallback(\n async () => runOperation(() => storage.clearLists()),\n [runOperation, storage],\n );\n\n const setAllListsInDataLibrary = useCallback(\n async (data: Array<LibraryListItemsGroupedByDataset>) => {\n const flattenedLists = data.map(flattenDataList);\n return runOperation(() => storage.setAllLists(flattenedLists));\n },\n [runOperation, storage],\n );\n\n const getDatalist = useCallback(\n (id: string) => {\n const list = lists[id];\n if (list) return list;\n\n setError({\n isError: true,\n status: 404,\n message: 'List not found. Returning empty list.',\n });\n return EMPTY_LIST;\n },\n [lists],\n );\n\n const results = useDeepCompareMemo(\n () => ({\n dataLibrary: lists,\n isLoading,\n isUpdating,\n error,\n addListToDataLibrary,\n updateListInDataLibrary,\n deleteListFromDataLibrary,\n clearLibrary,\n setAllListsInDataLibrary,\n getDatalist,\n }),\n [\n addListToDataLibrary,\n clearLibrary,\n deleteListFromDataLibrary,\n error,\n getDatalist,\n isLoading,\n isUpdating,\n lists,\n setAllListsInDataLibrary,\n updateListInDataLibrary,\n ],\n );\n\n return results;\n};\n\nexport default useDataLibrary;\n","import { gen3Api } from '../gen3/gen3Api';\nimport { GEN3_FENCE_API, GEN3_REDIRECT_URL } from '../../constants';\n\nimport { fetchFence } from './fetchFence';\n\nexport interface NameUrl {\n readonly name: string;\n readonly url: string;\n}\n\nexport interface Gen3LoginProvider {\n readonly desc?: string;\n readonly id: string;\n readonly idp: string;\n readonly name: string;\n readonly secondary: boolean;\n readonly url: string;\n readonly urls: Array<NameUrl>;\n}\n\nexport interface Gen3FenceLoginProviders {\n readonly default_provider: Gen3LoginProvider;\n readonly providers: Array<Gen3LoginProvider>;\n}\n\ninterface PresignedUrlRequest {\n readonly guid: string;\n readonly what: string;\n}\n\ninterface PresignedUrlResponse {\n readonly url: string;\n}\n\n/**\n * Creates a fence API endpoint for handling login/data processes\n * @param endpoints - defined endpoint query for logging in\n * @returns: The generated fence login API slice\n */\nexport const loginProvidersApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getLoginProviders: builder.query<Gen3FenceLoginProviders, void>({\n query: () => `${GEN3_FENCE_API}/login`,\n }),\n getDownload: builder.query<PresignedUrlResponse, string>({\n query: (guid) => `${GEN3_FENCE_API}/data/download/${guid}`,\n }),\n getPresignedUrl: builder.query<PresignedUrlResponse, PresignedUrlRequest>({\n query: ({ guid, what }) => `${GEN3_FENCE_API}/data/${what}/${guid}`,\n }),\n }),\n});\n\nexport const {\n useGetLoginProvidersQuery,\n useGetDownloadQuery,\n useLazyGetDownloadQuery,\n useGetPresignedUrlQuery,\n useLazyGetPresignedUrlQuery,\n} = loginProvidersApi;\n\n/**\n * Logout from fence\n */\n\nexport const logoutFence = async (redirect = '/') =>\n await fetchFence({\n endpoint: `${GEN3_FENCE_API}/logout?next=${GEN3_REDIRECT_URL}${redirect}`,\n method: 'GET',\n });\n","import { gen3Api } from '../gen3';\nimport { GEN3_FENCE_API } from '../../constants';\n\nexport interface APIKey {\n readonly jti: string;\n readonly exp: number;\n}\nexport interface Gen3FenceCredentials {\n readonly jtis: ReadonlyArray<APIKey>;\n}\n\n// extending the gen3API to add a tag to the endpoints\nconst credentialsWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Credentials'],\n});\n\ninterface DeleteCredentialParams {\n readonly csrfToken?: string;\n readonly id: string;\n}\n\ninterface AuthorizeFromCredentialsParams {\n api_key: string;\n key_id: string;\n}\nexport interface AuthTokenResponse {\n access_token: string;\n}\n\n/**\n * Adds a credentialsApi into the base gen3Api\n * @endpoints Includes get, add, and remove credential operations\n * @see https://github.com/uc-cdis/fence/blob/master/openapis/swagger.yaml#L972-L1033\n * @param getCredentials - List all the API keys for the current user\n * @param addNewCredential - Get a new API key for the current user\n * @param removeCredential - Delete API access key with given ID for current user\n * @returns: A fence credential API for manipulating user credentials\n */\nexport const credentialsApi = credentialsWithTags.injectEndpoints({\n endpoints: (builder) => ({\n getCredentials: builder.query<ReadonlyArray<APIKey>, void>({\n query: () => `${GEN3_FENCE_API}/credentials/api`,\n transformResponse: (\n response: Gen3FenceCredentials,\n ): ReadonlyArray<APIKey> => response['jtis'], // the response is a JSON object with a single key,\n // \"jtis\", which is an array of API keys\n // no need to transform the response, since the API returns the correct format\n providesTags: ['Credentials'],\n }),\n addNewCredential: builder.mutation({\n query: (csrfToken: string) => ({\n url: `${GEN3_FENCE_API}/credentials/api`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-csrf-token': csrfToken,\n },\n body: {\n scope: ['user', 'data'],\n },\n }),\n invalidatesTags: ['Credentials'],\n }),\n removeCredential: builder.mutation<void, DeleteCredentialParams>({\n query: ({ csrfToken, id }) => ({\n url: `${GEN3_FENCE_API}/credentials/api/${id}`,\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'x-csrf-token': csrfToken }),\n },\n }),\n invalidatesTags: ['Credentials'],\n }),\n authorizeFromCredentials: builder.mutation<\n AuthTokenResponse,\n AuthorizeFromCredentialsParams\n >({\n query: (params) => ({\n url: `${GEN3_FENCE_API}/credentials/api/access_token`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: {\n api_key: params.api_key, // pragma: allowlist secret\n key_id: params.key_id,\n },\n }),\n }),\n }),\n});\n\nexport const {\n useGetCredentialsQuery,\n useAddNewCredentialMutation,\n useRemoveCredentialMutation,\n useAuthorizeFromCredentialsMutation,\n} = credentialsApi;\n","import { gen3Api } from '../gen3';\n\nexport interface JWTKeys {\n keys: ReadonlyArray<string[2]>\n}\n\n// extending the gen3API to add a tag to the endpoints\nconst credentialsWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['fenceJWT'],\n});\n\n/**\n * A fence API for getting the public keys which can be used to validate\n * JWTs issued and signed by fence\n * @returns: Fence public keys\n */\nexport const jwtApi = credentialsWithTags.injectEndpoints({\n endpoints: (builder) => ({\n getJWKKeys: builder.query<ReadonlyArray<JWTKeys>, void>({\n query: () => 'user/jwt/keys',\n providesTags: ['fenceJWT'],\n }),\n }),\n});\n\nexport const {\n useGetJWKKeysQuery,\n} = jwtApi;\n","// using a random uuid v4 as the namespace\nexport const GEN3_APP_NAMESPACE = '7bfaa818-c69c-457e-8d87-413cf60c25f0';\n","import React, { ComponentType, useEffect } from 'react';\nimport { coreStore } from '../../store';\nimport { v5 as uuidv5 } from 'uuid';\nimport { addGen3AppMetadata, EntityType } from './gen3AppsSlice';\nimport {\n configureStore,\n Dispatch,\n Middleware,\n UnknownAction,\n} from '@reduxjs/toolkit';\nimport { Action, Store } from 'redux';\nimport {\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n Provider,\n ReactReduxContextValue,\n TypedUseSelectorHook,\n} from 'react-redux';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\nimport { registerGen3App } from './gen3AppRegistry';\nimport { DataStatus } from '../../dataAccess';\nimport { CookiesProvider } from 'react-cookie';\nimport { GEN3_APP_NAMESPACE } from './constants';\n\nexport interface CreateGen3AppOptions<T> {\n readonly App: ComponentType<T>;\n readonly name: string;\n readonly version: string;\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n}\n\nexport const getGen3AppId = (name: string, version: string): string => {\n const nameVersion = `${name}::${version}`;\n return uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n};\n\n/**\n * Creates a Gen3App that is dynamically loaded\n */\nexport const createGen3App = <\n T extends Record<any, any> = Record<string, any>,\n>({\n App,\n name,\n version,\n requiredEntityTypes,\n}: CreateGen3AppOptions<T>): React.FC<T> => {\n // create a stable id for this app\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n // need to create store and provider.\n // return a component representing this app\n // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added\n // a route can be setup for the app\n\n // need to register its name, category, path, data requirements\n // this will be used to build page3\n // click app link\n // const store = configureStore({\n // // TODO allow user to pass in a reducer in CreateGen3AppOptions?\n // reducer: (state) => state,\n // devTools: {\n // name: `${nameVersion}::${id}`,\n // },\n // });\n\n const Gen3AppWrapper: React.FC<T> = (props: T) => {\n useEffect(() => {\n document.title = `${name}`;\n });\n\n return <App {...props} />;\n };\n\n // add the app to the store\n coreStore.dispatch(\n addGen3AppMetadata({\n id,\n name,\n version,\n requiredEntityTypes,\n }),\n );\n registerGen3App(name, Gen3AppWrapper as unknown as React.ReactNode);\n\n return Gen3AppWrapper;\n};\n\nexport interface AppDataSelectorResponse<T> {\n readonly data?: T;\n readonly status: DataStatus;\n readonly error?: string;\n}\n\nexport interface UseAppDataResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\nexport interface UseAppDataHook<P, T> {\n (...params: P[]): UseAppDataResponse<T>;\n}\n\nexport interface CreateGEN3AppStore {\n readonly name: string;\n readonly version: string;\n readonly reducers: (...args: any) => any;\n middleware?: Middleware<unknown, any, Dispatch<UnknownAction>>;\n}\n\n// ----------------------------------------------------------------------------------------\n// Apps with Local Storage\n//\n\nexport const createAppStore = (\n options: CreateGEN3AppStore,\n): Record<any, any> => {\n const { name, version, reducers, middleware } = options;\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n const store = configureStore({\n reducer: reducers,\n devTools: {\n name: `${nameVersion}::${id}`,\n },\n middleware: (getDefaultMiddleware) =>\n middleware\n ? getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n ],\n },\n }).concat(middleware)\n : getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n ],\n },\n }),\n });\n type AppState = ReturnType<typeof reducers>;\n const context = React.createContext<ReactReduxContextValue | null>(null);\n\n type AppDispatch = typeof store.dispatch;\n const useAppSelector: TypedUseSelectorHook<AppState> =\n createSelectorHook(context);\n const useAppDispatch: () => AppDispatch = createDispatchHook(context);\n const useAppStore = createStoreHook(context);\n\n return {\n id: id,\n AppStore: store,\n AppContext: context,\n useAppSelector: useAppSelector,\n useAppDispatch: useAppDispatch,\n useAppStore: useAppStore,\n };\n};\n\nexport interface CreateGen3AppWithOwnStoreOptions<\n T extends Record<any, any> = Record<string, any>,\n A extends Action = UnknownAction,\n S = any,\n> {\n readonly App: ComponentType<T>;\n readonly id: string; // unique id for this app\n readonly name: string; // name of the app\n readonly version: string; // version of the app, should be unique\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n readonly store: Store<S, A>; // the redux-store for this app\n readonly context: any;\n}\n\nexport const createGen3AppWithOwnStore = <\n T extends Record<any, any> = Record<string, any>,\n A extends Action = UnknownAction,\n S = any,\n>(\n options: CreateGen3AppWithOwnStoreOptions<T, A, S>,\n): React.ReactNode => {\n const { App, id, name, version, requiredEntityTypes, store, context } =\n options;\n\n // need to create store and provider.\n // return a component representing this app\n // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added\n // a route can be setup for the app\n\n // need to register its name, category, path, data requirements\n // this will be used to build page3\n // click app link\n\n const Gen3AppWrapper: React.FC<T> = (props: T) => {\n useEffect(() => {\n document.title = `GEN3 - ${name}`;\n });\n\n return (\n <Provider store={store} context={context}>\n <CookiesProvider>\n <App {...props} />\n </CookiesProvider>\n </Provider>\n );\n };\n\n // add the app to the store\n coreStore.dispatch(\n addGen3AppMetadata({\n id,\n name,\n version,\n requiredEntityTypes,\n }),\n );\n registerGen3App(name, Gen3AppWrapper as unknown as React.ReactNode);\n return Gen3AppWrapper as unknown as React.ReactNode;\n};\n","import * as React from 'react';\nimport {\n createDispatchHook,\n createStoreHook,\n createSelectorHook,\n ReactReduxContextValue,\n} from 'react-redux';\nimport {\n ApiModules,\n buildCreateApi,\n coreModule,\n CreateApi,\n reactHooksModule,\n BaseQueryFn,\n fetchBaseQuery,\n} from '@reduxjs/toolkit/query/react';\nimport { configureStore } from '@reduxjs/toolkit';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\nimport { GEN3_API } from '../../constants';\nimport { getCookie } from 'cookies-next';\nimport { v5 as uuidv5 } from 'uuid';\nimport { GEN3_APP_NAMESPACE } from './constants';\n\nexport const createAppApiForRTKQ = (\n reducerPath: string,\n name: string,\n version: string,\n additionalReducers?: (...args: any) => any,\n baseQuery?: BaseQueryFn,\n) => {\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n const appContext = React.createContext<ReactReduxContextValue | null>(null);\n const useAppSelector = createSelectorHook(appContext);\n const useAppDispatch = createDispatchHook(appContext);\n const useAppStore = createStoreHook(appContext);\n\n const appCreateApi: CreateApi<keyof ApiModules<any, any, any, any>> =\n buildCreateApi(\n coreModule(),\n reactHooksModule({\n hooks: {\n useDispatch: useAppDispatch,\n useSelector: useAppSelector,\n useStore: useAppStore,\n },\n }),\n );\n\n const appRTKQApi = appCreateApi({\n reducerPath: reducerPath,\n baseQuery:\n baseQuery ??\n fetchBaseQuery({\n baseUrl: `${GEN3_API}`,\n prepareHeaders: (headers) => {\n headers.set('Content-Type', 'application/json');\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n const accessToken = getCookie('credentials_token');\n if (accessToken)\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n\n return headers;\n },\n }),\n endpoints: () => ({}),\n });\n\n const appMiddleware = appRTKQApi.middleware;\n const appStore = configureStore({\n devTools: {\n name: `${nameVersion}::${id}`,\n },\n reducer: {\n [appRTKQApi.reducerPath]: appRTKQApi.reducer,\n ...additionalReducers,\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\n },\n }).concat(appMiddleware),\n });\n\n return {\n useAppSelector: useAppSelector,\n useAppDispatch: useAppDispatch,\n useAppStore: useAppStore,\n AppContext: appContext,\n appApi: appRTKQApi,\n appContext: appContext,\n appStore: appStore,\n };\n};\n","import { gen3Api } from '../gen3';\nimport { JSONObject } from '../../types';\nimport { GEN3_GUPPY_API } from '../../constants';\n\nexport const graphQLWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['graphQL'],\n});\n\n/**\n * Creates a graphQLAPI for graphql queries to elasticsearch indices via guppy\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md\n * @param query - Resolver function which configures the graphql query with graphQLParams argument\n * @returns: A guppy search API for fetching metadata\n */\nexport const graphQLAPI = graphQLWithTags.injectEndpoints({\n endpoints: (builder) => ({\n graphQL: builder.query<JSONObject, JSONObject>({\n query: (graphQLParams) => ({\n url: `${GEN3_GUPPY_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(graphQLParams),\n }),\n }),\n }),\n});\n\nexport const { useGraphQLQuery } = graphQLAPI;\n","import { gen3Api } from '../gen3';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { convertFilterSetToGqlFilter, GQLFilter } from '../filters';\nimport { GuppyDownloadDataParams, GuppyDownloadDataRequest } from './types';\n\nexport interface GuppyDownloadDataQueryParams extends Omit<\n GuppyDownloadDataRequest,\n 'filter'\n> {\n filter: GQLFilter;\n}\n\ninterface DownloadRequestStatus {\n readonly status: string;\n readonly message: string;\n}\n\n/**\n * Creates a Guppy API for fetching bulk (> 10K rows) elasticsearch data\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/download.md\n * @param endpoints - Resolver function which configures the query with\n * type, filter, accessibility, fields, and sort arguments\n * @returns: A guppy download API for fetching bulk metadata\n */\nexport const guppyDownloadApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n downloadFromGuppy: builder.query({\n query: ({\n type,\n filter,\n accessibility,\n fields,\n sort,\n }: GuppyDownloadDataParams) => {\n const queryBody: GuppyDownloadDataQueryParams = {\n filter: convertFilterSetToGqlFilter(filter),\n ...{ type, accessibility, fields, sort },\n };\n\n return {\n url: `${GEN3_GUPPY_API}/download`,\n method: 'POST',\n body: queryBody,\n cache: 'no-cache',\n };\n },\n transformResponse: (response: DownloadRequestStatus) => {\n return response;\n },\n }),\n }),\n});\n\nexport const { useDownloadFromGuppyQuery, useLazyDownloadFromGuppyQuery } =\n guppyDownloadApi;\n","import { gen3Api } from '../gen3';\nimport { GEN3_MANIFEST_API } from '../../constants';\nimport { Manifest } from './types';\n\nconst TAGS = 'manifest';\n\nexport const manifestTags = gen3Api.enhanceEndpoints({\n addTagTypes: [TAGS],\n});\n\nexport const manifestApi = manifestTags.injectEndpoints({\n endpoints: (builder) => ({\n getManifestServiceStatus: builder.query<string, void>({\n query: () => `${GEN3_MANIFEST_API}/_status`,\n }),\n getFileManifest: builder.query<Manifest, void>({\n query: () => `${GEN3_MANIFEST_API}`,\n }),\n getFileFromManifest: builder.query<Manifest, string>({\n query: (id) => `${GEN3_MANIFEST_API}/file/${id}`,\n }),\n addFileManifest: builder.mutation<string, Manifest>({\n query: (manifest) => ({\n url: `${GEN3_MANIFEST_API}`,\n method: 'POST',\n body: manifest,\n }),\n transformResponse: (response: { filename: string }) => {\n return response.filename;\n },\n invalidatesTags: [TAGS],\n }),\n getCohortManifest: builder.query<Manifest, void>({\n query: () => `${GEN3_MANIFEST_API}/cohorts`,\n }),\n addCohortManifest: builder.mutation<string, Manifest>({\n query: (manifest) => ({\n url: `${GEN3_MANIFEST_API}/cohorts`,\n method: 'POST',\n body: manifest,\n }),\n transformResponse: (response: { guid: string }) => {\n return response.guid;\n },\n invalidatesTags: [TAGS],\n }),\n getMetadataManifest: builder.query<Manifest, void>({\n query: () => `${GEN3_MANIFEST_API}/metadata`,\n }),\n getMetadataFromManifest: builder.query<Manifest, string>({\n query: (id) => `${GEN3_MANIFEST_API}/metadata/${id}`,\n }),\n addMetadataManifest: builder.mutation<string, Record<string, unknown>>({\n query: (data) => ({\n url: `${GEN3_MANIFEST_API}/metadata`,\n method: 'POST',\n body: data,\n }),\n transformResponse: (response: { guid: string }) => {\n return response.guid;\n },\n invalidatesTags: [TAGS],\n }),\n }),\n});\n\nexport const {\n useGetManifestServiceStatusQuery,\n useLazyGetManifestServiceStatusQuery,\n useGetFileManifestQuery,\n useGetCohortManifestQuery,\n useGetMetadataManifestQuery,\n useGetFileFromManifestQuery,\n useGetMetadataFromManifestQuery,\n useAddCohortManifestMutation,\n useAddFileManifestMutation,\n useAddMetadataManifestMutation,\n} = manifestApi;\n","import { JSONObject } from '../../types';\nimport { gen3Api } from '../gen3';\nimport Queue from 'queue';\nimport { GEN3_CROSSWALK_API, GEN3_MDS_API } from '../../constants';\nimport { JSONPath } from 'jsonpath-plus';\nimport { CrosswalkInfo, IndexedMetadataFilters } from './types';\n\nexport interface Metadata {\n readonly entries: Array<Record<string, unknown>>;\n}\n\nexport type CrosswalkArray = Array<CrosswalkInfo>;\n\ninterface ToMapping {\n id: string;\n dataPath: string[];\n}\n\ninterface CrossWalkParams {\n readonly ids: string[];\n readonly toPaths: Array<ToMapping>;\n}\n\nexport interface MetadataResponse {\n data: Array<JSONObject>;\n hits: number;\n}\n\nexport interface MetadataPaginationParams {\n pageSize: number;\n offset: number;\n}\n\nexport interface MetadataRequestParams extends MetadataPaginationParams {\n guidType: string;\n studyField: string;\n}\n\ninterface IndexedMetadataRequestParams extends MetadataRequestParams {\n indexKeys: Array<string>;\n filterEmpty?: IndexedMetadataFilters;\n}\n\nconst HasEnoughData = (\n data: Record<string, any>,\n keys: string[],\n limit: number,\n) => {\n const numEmptyKeys = keys.filter(\n (k) =>\n Object.hasOwn(data, k) &&\n typeof data[k] === 'string' &&\n data[k].trim() === '',\n ).length;\n return numEmptyKeys < limit;\n};\n\n/**\n * Defines metadataApi service using a base URL and expected endpoints. Derived from gen3Api core API.\n *\n * @param endpoints - Defines endpoints used in discovery page\n * @param getAggMDS - Queries aggregate metadata service\n * @see https://github.com/uc-cdis/metadata-service/blob/master/docs/agg_mds.md\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Aggregate/get_aggregate_metadata_aggregate_metadata_get\n * @param getMDS - Queries normal metadata service\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Query/search_metadata_metadata_get\n * @param getIndexAggMDS - queries the Aggregate Metadata service and returns all common passed in indexKeys\n * @param getTags - Probably refering to Aggregate metadata service summary statistics query\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Aggregate/get_aggregate_tags_aggregate_tags_get\n * @param getData - Looks like a duplicate of getMDS handler. unused in ./frontend package\n * @param getCrosswalkData - Maps ids from one source to another\n * @returns: A guppy download API for fetching bulk metadata\n */\nexport const metadataApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getAggMDS: builder.query<MetadataResponse, MetadataRequestParams>({\n query: ({ offset, pageSize }: MetadataRequestParams) => {\n return `${GEN3_MDS_API}/aggregate/metadata?flatten=true&pagination=true&offset=${offset}&limit=${pageSize}`;\n },\n transformResponse: (response: Record<string, any>, _meta, params) => {\n return {\n data: response.results.map((x: JSONObject) => {\n const objValues = Object.values(x);\n const firstValue = objValues\n ? (objValues.at(0) as JSONObject)\n : undefined;\n return firstValue ? firstValue[params.studyField] : undefined;\n }),\n hits: response.pagination.hits,\n };\n },\n }),\n getIndexAggMDS: builder.query<\n MetadataResponse,\n IndexedMetadataRequestParams\n >({\n query: ({ pageSize }: IndexedMetadataRequestParams) => {\n return `${GEN3_MDS_API}/aggregate/metadata?limit=${pageSize}`;\n },\n transformResponse: (response: Record<string, any>, _meta, params) => {\n const dataFromIndexes = params.indexKeys.reduce(\n (acc, key) => {\n if (response[key]) {\n acc.push(...response[key]);\n }\n return acc;\n },\n [] as Array<Record<string, any>>,\n );\n\n return {\n data: (\n dataFromIndexes.map((x: JSONObject) => {\n const objValues = Object.values(x);\n const objIds = Object.keys(x);\n let firstValue = objValues\n ? (objValues.at(0) as JSONObject)\n : undefined;\n\n if (params?.filterEmpty) {\n // remove any data that has < limit if defined\n if (\n firstValue &&\n !HasEnoughData(\n firstValue[params.studyField] as Record<string, any>,\n params.filterEmpty.keys,\n params.filterEmpty.limit,\n )\n )\n firstValue = undefined;\n }\n return firstValue\n ? {\n gen3MDSGUID: objIds.at(0),\n ...(firstValue[params.studyField] as Record<string, any>),\n }\n : undefined;\n }) as JSONObject[]\n ).filter((x: JSONObject | undefined) => x !== undefined),\n hits: dataFromIndexes.length,\n };\n },\n }),\n getMDS: builder.query<MetadataResponse, MetadataRequestParams>({\n query: ({ guidType, offset, pageSize }) => {\n return `${GEN3_MDS_API}/metadata?data=True&_guid_type=${guidType}&limit=${pageSize}&offset=${offset}`;\n },\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n data: Object.keys(response).map((guid) => response[guid]),\n hits: Object.keys(response).length,\n };\n },\n }),\n getTags: builder.query<Metadata, string>({\n query: () => 'tags',\n }),\n getData: builder.query<Metadata, string>({\n query: (params) => ({ url: `metadata?${params}` }),\n }),\n getMetadataById: builder.query<JSONObject, string>({\n query: (params) => ({ url: `${GEN3_MDS_API}/metadata/${params}` }),\n }),\n // TODO: Move this to own slice\n getCrosswalkData: builder.query<CrosswalkArray, CrossWalkParams>({\n queryFn: async (arg, _queryApi, _extraOptions, fetchWithBQ) => {\n const queryMultiple = async (): Promise<CrosswalkInfo[]> => {\n let result = [] as CrosswalkInfo[];\n const queue = Queue({ concurrency: 15 });\n for (const id of arg.ids) {\n queue.push(async (callback?: () => void) => {\n const response = await fetchWithBQ({\n url: `${GEN3_CROSSWALK_API}/metadata/${id}`,\n });\n\n if (response.error) {\n return { error: response.error };\n }\n\n const toData = arg.toPaths.reduce(\n (acc, path) => {\n acc[path.id] =\n JSONPath<string>({\n json: response.data as Record<string, any>,\n path: `$.[${path.dataPath}]`,\n resultType: 'value',\n })?.[0] ?? 'n/a';\n return acc;\n },\n {} as Record<string, string>,\n );\n\n result = [\n ...result,\n {\n from: id,\n to: toData,\n },\n ];\n if (callback) callback();\n\n return result;\n });\n }\n\n return new Promise((resolve, reject) => {\n queue.start((err: unknown) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n });\n };\n\n const result = await queryMultiple();\n return { data: result };\n },\n }),\n }),\n});\n\nexport const {\n useGetAggMDSQuery,\n useGetMDSQuery,\n useGetTagsQuery,\n useGetDataQuery,\n useGetMetadataByIdQuery,\n useGetCrosswalkDataQuery,\n useLazyGetCrosswalkDataQuery,\n useGetIndexAggMDSQuery,\n} = metadataApi;\n","import Queue from 'queue';\nimport { GEN3_MDS_API } from '../../constants';\nimport { fetchJSONDataFromURL, HttpMethod } from '../../utils';\n\nexport const queryMultipleMDSRecords = async (\n guids: ReadonlyArray<string>,\n useAggMDS: boolean = false,\n signal?: AbortSignal,\n): Promise<Record<string, unknown>> => {\n const result: Record<string, unknown> = {};\n const queue = Queue({ concurrency: 15 });\n for (const id of guids) {\n queue.push(async (callback?: () => void) => {\n try {\n result[id] = await fetchJSONDataFromURL(\n useAggMDS\n ? `${GEN3_MDS_API}/aggregate/metadata/guid/${id}`\n : `${GEN3_MDS_API}/metadata/${id}`,\n false,\n 'GET' as HttpMethod,\n undefined,\n signal,\n );\n\n if (callback) callback();\n\n return result;\n } catch (e: unknown) {\n return { error: e };\n }\n });\n }\n\n return new Promise((resolve, reject) => {\n queue.start((err: unknown) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n });\n};\n","export interface RemoteSupportRequest {\n subject: string;\n fullName: string;\n email: string;\n contents: string;\n}\n\nexport type RemoteSupportConfiguration = Record<string, string>;\n\nexport type RemoteSupportRequestAction = (\n requestData: RemoteSupportRequest,\n configuration: RemoteSupportConfiguration,\n) => Promise<void>;\n\nexport class MissingServiceConfigurationError extends Error {\n constructor(serviceName: string) {\n super(`Missing service configuration for ${serviceName}`);\n this.name = 'MissingServiceConfigurationError';\n }\n}\n","export interface Logger {\n warn(message: string): void;\n\n error(message: string): void;\n}\n\n// Default console logger\nexport const defaultLogger: Logger = {\n warn: (message: string) => console.warn(message),\n error: (message: string) => console.error(message),\n};\n","import {\n MissingServiceConfigurationError,\n RemoteSupportRequestAction,\n} from './types';\nimport { defaultLogger, Logger } from '../../../utils/logger';\n\nconst DefaultRemoteSupportAction: RemoteSupportRequestAction = async () => {\n throw new Error('No remote support service registered for this service name');\n};\n\nexport class RemoteSupportServiceRegistry {\n private services = new Map<string, RemoteSupportRequestAction>();\n private logger: Logger;\n\n constructor(logger: Logger = defaultLogger) {\n this.logger = logger;\n }\n\n /**\n * Register a remote support service\n * @param serviceName - Unique identifier for the service\n * @param action - The action function to execute for this service\n * @throws Error if serviceName or action is invalid\n */\n public registerService(\n serviceName: string,\n action: RemoteSupportRequestAction,\n ): void {\n if (!serviceName?.trim()) {\n throw new Error('Service name cannot be empty or null');\n }\n\n if (typeof action !== 'function') {\n throw new Error('Action must be a function');\n }\n\n if (this.services.has(serviceName)) {\n this.logger.warn(\n `Service '${serviceName}' is already registered and will be overwritten.`,\n );\n }\n\n this.services.set(serviceName, action);\n }\n\n /**\n * Get a registered service action\n * @param serviceName - The service identifier\n * @returns The registered action or default action if not found\n */\n public getSupportService(serviceName: string): RemoteSupportRequestAction {\n if (!serviceName?.trim()) {\n this.logger.error('Service name cannot be empty or null');\n return DefaultRemoteSupportAction;\n }\n\n const service = this.services.get(serviceName);\n\n if (!service) {\n this.logger.warn(\n `Service '${serviceName}' not registered. Using default action.`,\n );\n throw new MissingServiceConfigurationError(serviceName);\n }\n\n return service;\n }\n\n /**\n * Check if a service is registered\n * @param serviceName - The service identifier\n * @returns true if service is registered\n */\n public hasService(serviceName: string): boolean {\n return this.services.has(serviceName);\n }\n\n /**\n * Get all registered service names\n * @returns Array of registered service names\n */\n public getRegisteredServices(): string[] {\n return Array.from(this.services.keys());\n }\n\n /**\n * Unregister a service\n * @param serviceName - The service identifier\n * @returns true if service was removed, false if it wasn't registered\n */\n public unregisterService(serviceName: string): boolean {\n return this.services.delete(serviceName);\n }\n\n /**\n * Clear all registered services\n */\n public clear(): void {\n this.services.clear();\n }\n\n /**\n * Get the number of registered services\n */\n public size(): number {\n return this.services.size;\n }\n}\n\nlet defaultRegistryInstance: RemoteSupportServiceRegistry | null = null;\n\nexport function getRemoteSupportServiceRegistry(\n logger?: Logger,\n): RemoteSupportServiceRegistry {\n if (!defaultRegistryInstance) {\n defaultRegistryInstance = new RemoteSupportServiceRegistry(logger);\n }\n return defaultRegistryInstance;\n}\n\nexport function resetDefaultRegistry(): void {\n defaultRegistryInstance = null;\n}\n","import {\n RemoteSupportConfiguration,\n RemoteSupportRequest,\n RemoteSupportRequestAction,\n} from './types';\n\nexport const ZENDESK_MAX_SUBJECT_LENGTH = 255;\nexport const ZENDESK_DOMAIN =\n process.env.NEXT_PUBLIC_GEN3_ZENDESK_API ||\n 'https://<SUBDOMAIN_NAME>.zendesk.com';\n\nexport const createZendeskTicket: RemoteSupportRequestAction = async (\n { subject, fullName, email, contents }: RemoteSupportRequest,\n configuration: RemoteSupportConfiguration,\n) => {\n const { zendeskSubdomainName } = configuration;\n try {\n let zendeskTicketCreationURL = `${ZENDESK_DOMAIN}/api/v2/requests`;\n if (zendeskSubdomainName) {\n zendeskTicketCreationURL = zendeskTicketCreationURL.replace(\n '<SUBDOMAIN_NAME>',\n zendeskSubdomainName,\n );\n } else {\n // This is the default Gen3 helpdesk subdomain\n zendeskTicketCreationURL = zendeskTicketCreationURL.replace(\n '<SUBDOMAIN_NAME>',\n 'gen3support',\n );\n }\n let ticketSubject = subject;\n if (subject.length > ZENDESK_MAX_SUBJECT_LENGTH) {\n ticketSubject = `${subject.substring(\n 0,\n ZENDESK_MAX_SUBJECT_LENGTH - 3,\n )}...`;\n }\n await fetch(zendeskTicketCreationURL, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n request: {\n subject: ticketSubject,\n comment: {\n body: contents,\n },\n requester: {\n name: fullName,\n email,\n },\n },\n }),\n }).then((response) => {\n if (response.status !== 201) {\n throw new Error(\n `Request for create Zendesk ticket failed with status ${response.status}`,\n );\n }\n return response;\n });\n } catch (err) {\n throw new Error(`Request for create Zendesk ticket failed: ${err}`);\n }\n};\n","import { getRemoteSupportServiceRegistry } from './registeredRemoteSupportServices';\nimport { createZendeskTicket } from './zenDesk';\n\nexport const registerDefaultRemoteSupport = () => {\n const registry = getRemoteSupportServiceRegistry();\n registry.registerService('zenDesk', createZendeskTicket);\n};\n","import { gen3Api } from '../gen3';\nimport { GEN3_REQUESTOR_API } from '../../constants';\n\nexport interface RequestQueryBody {\n policy_id?: string;\n resource_display_name?: string;\n resource_id?: string;\n resource_path?: string;\n resource_paths?: string[];\n role_ids?: string[];\n status?: string;\n username?: string;\n}\n\nexport interface RequestorResponse {\n resource_display_name?: string | null;\n updated_time?: string;\n resource_id?: string;\n request_id?: string;\n username?: string;\n status?: string;\n revoke?: boolean;\n policy_id?: string;\n created_time?: string;\n}\n\nexport interface RequestListQuery {\n policy_ids: Array<string>;\n resource_ids: Array<string>;\n status: string;\n revoke: boolean;\n}\n\n/**\n * Converts a Partial<RequestListQuery> object to a URL query string\n * @param params - The parameters to convert\n * @returns A formatted query string (including the leading '?')\n */\nexport const convertToQueryString = (\n params: Partial<RequestListQuery>,\n): string | undefined => {\n if (!params || Object.keys(params).length === 0) {\n return '';\n }\n\n const queryParts: string[] = [];\n\n // Handle policy_ids array\n if (params.policy_ids && params.policy_ids.length > 0) {\n params.policy_ids.forEach((id) => {\n queryParts.push(`policy_id=${encodeURIComponent(id)}`);\n });\n }\n\n if (params.resource_ids && params.resource_ids.length > 0) {\n params.resource_ids.forEach((id) => {\n queryParts.push(`resource_id=${encodeURIComponent(id)}`);\n });\n }\n\n // Handle status\n if (params.status !== undefined) {\n queryParts.push(`status=${encodeURIComponent(params.status)}`);\n }\n\n // Handle revoke\n if (params.revoke !== undefined) {\n queryParts.push(`revoke=${params.revoke}`);\n }\n\n return queryParts.length > 0 ? `?${queryParts.join('&')}` : undefined;\n};\n\n/**\n * Defines requester service using a base URL and expected endpoints. Derived from gen3Api core API.\n *\n * @param endpoints - Defines endpoints used in discovery page\n * @param request - Queries Requestor service\n * @see https://github.com/uc-cdis/requestor?tab=readme-ov-file#requestor\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/requestor/master/docs/openapi.yaml#/Query/list_requests_request_get\n * @returns: Object of request made\n */\n\n//TODO convert snakeCase yTpes o camelCase by adding transform respomse\nexport const requestorApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n status: builder.query<RequestorResponse, RequestListQuery | void>({\n // get status of requestor service\n query: () => `${GEN3_REQUESTOR_API}/_status`,\n }),\n request: builder.query<RequestorResponse, Partial<RequestListQuery>>({\n query: (params?) => {\n const strParams = params ? convertToQueryString(params) : undefined;\n return `${GEN3_REQUESTOR_API}/request${strParams ?? ''}`;\n },\n }),\n userRequest: builder.query<\n Array<RequestorResponse>,\n Partial<RequestListQuery> | undefined\n >({\n // get a list of requests\n query: (params?) => {\n const strParams = params ? convertToQueryString(params) : undefined;\n return `${GEN3_REQUESTOR_API}/request/user${strParams ?? ''}`;\n },\n }),\n requestById: builder.query<RequestorResponse, string>({\n query: (requestId) => `${GEN3_REQUESTOR_API}/request/${requestId}`,\n }),\n createRequest: builder.mutation<RequestorResponse, RequestQueryBody>({\n query: (queryBody: RequestQueryBody) => ({\n url: `${GEN3_REQUESTOR_API}/request`,\n method: 'POST',\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(queryBody),\n }),\n }),\n }),\n});\n\nexport const {\n useCreateRequestMutation,\n useRequestQuery,\n useLazyRequestQuery,\n useStatusQuery: useRequestorStatusQuery,\n useRequestByIdQuery,\n useUserRequestQuery,\n} = requestorApi;\n","import { gen3Api } from '../gen3';\nimport { GEN3_SOWER_API } from '../../constants';\nimport { JSONObject } from '../../types';\nimport { JobStatus } from './types';\n\nexport interface DispatchJobParams {\n action: string;\n input: JSONObject;\n}\n\nexport interface DispatchJobResponse {\n uid: string;\n name: string;\n status: string;\n}\n\ntype JobListResponse = Array<JobStatus>;\n\n/**\n * Creates a loadingStatusApi for checking the status of a sower data download job\n * @param getJobList Shows the list of jobs currently running\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/sower/master/openapis/openapi.yaml#/sower/list\n * @param getDownloadStatus Shows the status of a selected job\n * @returns: A sower job response dict which returns job information of file downloads\n */\nexport const loadingStatusApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getSowerJobList: builder.query<JobListResponse, void>({\n query: () => `${GEN3_SOWER_API}/list`,\n }),\n submitSowerJob: builder.mutation<DispatchJobResponse, DispatchJobParams>({\n query: (params) => ({\n url: `${GEN3_SOWER_API}/dispatch`,\n method: 'POST',\n body: params,\n }),\n }),\n getSowerJobStatus: builder.query<DispatchJobResponse, string>({\n query: (uid) => `${GEN3_SOWER_API}/status?UID=${uid}`,\n }),\n getSowerOutput: builder.query<DispatchJobResponse, string>({\n query: (uid) => `${GEN3_SOWER_API}/output?UID=${uid}`,\n }),\n getSowerServiceStatus: builder.query<JSON, void>({\n query: () => `${GEN3_SOWER_API}/_status`,\n }),\n }),\n});\n\nexport const {\n useGetSowerJobListQuery,\n useLazyGetSowerJobListQuery,\n useSubmitSowerJobMutation,\n useGetSowerJobStatusQuery,\n useGetSowerOutputQuery,\n useGetSowerServiceStatusQuery,\n} = loadingStatusApi;\n","import { AuthzMapping } from '../authz';\n\nexport const resourcePathFromProjectID = (projectID: string): string => {\n const split = projectID.split('-');\n const program = split[0];\n const project = split.slice(1).join('-');\n const resourcePath = ['/programs', program, 'projects', project].join('/');\n return resourcePath;\n};\n\nexport const isRootUrl = (urlFragment: string): boolean =>\n urlFragment === '_root';\n\nexport const isProgramUrl = (urlFragment: string): boolean =>\n urlFragment !== '_root' && !urlFragment.includes('-');\n\nexport const userHasSheepdogProgramAdmin = (\n userAuthMapping: Record<string, any> = {},\n): boolean =>\n userAuthMapping['/services/sheepdog/submission/program'] !== undefined;\n\nexport const userHasSheepdogProjectAdmin = (\n userAuthMapping: Record<string, any> = {},\n): boolean =>\n userAuthMapping['/services/sheepdog/submission/project'] !== undefined;\n\nexport const projectCodeFromResourcePath = (resourcePath: string): string => {\n const split = resourcePath.split('/');\n return split.length < 5 || split[1] !== 'programs' || split[3] !== 'projects'\n ? ''\n : split[4];\n};\n\nexport const listifyMethodsFromMapping = (\n actions: { service: string; method: string }[],\n): string[] => {\n const reducer = (\n accumulator: string[],\n currval: { service: string; method: string },\n ): string[] => accumulator.concat([currval.method]);\n return actions.reduce(reducer, []);\n};\n\nexport const userHasDataUpload = (\n userAuthMapping: AuthzMapping = {},\n): boolean => {\n const actionIsFileUpload = (x: { method: string }): boolean =>\n x.method === 'file_upload';\n const resource = userAuthMapping['/data_file'];\n return resource !== undefined && resource.some(actionIsFileUpload);\n};\n\nexport const userHasMethodForServiceOnResource = (\n method: string,\n service: string,\n resourcePath: string,\n userAuthMapping: AuthzMapping = {},\n): boolean => {\n const actions = userAuthMapping[resourcePath];\n return (\n actions !== undefined &&\n actions.some(\n (x: { service: string; method: string }) =>\n (x.service === service || x.service === '*') &&\n (x.method === method || x.method === '*'),\n )\n );\n};\n\nexport const userHasMethodForServiceOnProject = (\n method: string,\n service: string,\n projectID: string,\n userAuthMapping: AuthzMapping = {},\n): boolean => {\n const resourcePath = resourcePathFromProjectID(projectID);\n return userHasMethodForServiceOnResource(\n method,\n service,\n resourcePath,\n userAuthMapping,\n );\n};\n\nexport const userHasMethodOnAnyProject = (\n method: string,\n userAuthMapping: AuthzMapping = {},\n): boolean => {\n const actionHasMethod = (x: { method: string }): boolean =>\n x.method === method;\n const actionArrays = Object.values(userAuthMapping);\n const hasMethod = actionArrays.some((x: { method: string }[]) =>\n x.some(actionHasMethod),\n );\n return hasMethod;\n};\n\nexport const userHasCreateOrUpdateOnAnyProject = (\n userAuthMapping: AuthzMapping = {},\n): boolean =>\n userHasMethodOnAnyProject('create', userAuthMapping) ||\n userHasMethodOnAnyProject('update', userAuthMapping);\n","import { gen3Api } from '../gen3';\nimport { GEN3_SUBMISSION_API } from '../../constants';\nimport {\n Project,\n ProjectResponse,\n ProjectsListRequestParams,\n SubmissionInfo,\n SubmissionGraphqlParams,\n SubmissionGraphqlResponse,\n} from './types';\nimport { JSONObject } from '../../types';\nimport { extractValuesFromObject } from '../../utils/extractvalues';\nimport type { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\ninterface ProjectFetchQueryResponse {\n data: {\n data: {\n project: Array<Project>;\n };\n };\n}\n\n/**\n * Project details from the project query\n */\ninterface ProjectInfoFromProjectDetails {\n name: string;\n id: string;\n code: string;\n}\n\ninterface ProjectDetailsResponse\n extends Record<\n string,\n string | number | Array<ProjectInfoFromProjectDetails>\n > {\n project: Array<ProjectInfoFromProjectDetails>;\n}\n\ninterface ProjectDetailsFetchQueryResponse {\n data: {\n data: ProjectDetailsResponse;\n };\n}\n\n/**\n * Project details results a list of project details\n * and the project information\n */\ninterface ProjectDetailsResults {\n [key: string]: string | number | ProjectInfoFromProjectDetails;\n project: ProjectInfoFromProjectDetails;\n}\n\nexport interface ProjectDetailsQueryResponse {\n details: ProjectDetailsResults[];\n hits: number;\n}\n\ninterface SubmissionQueryResponse {\n transactionList: SubmissionInfo[];\n}\n\nconst SubmissionGraphqlQuery = `query transactionList {\n transactionList: transaction_log(last: 20) {\n id\n submitter\n project_id\n created_datetime\n documents {\n doc_size\n doc\n id\n }\n state\n }\n}`;\n\n/**\n * Defines submissionApi service using a base URL and expected endpoints. Derived from gen3Api core API.\n * @param endpoints - Defines endpoints used in submission page\n * @param getProjects - Queries the list of projects\n * @param getProjectsDetails - Queries the list of projects and their details\n * @param getSubmissionGraphQL - Queries the submission graphql with a query and variables\n * @returns: A submission API for fetching project details\n */\nexport const submissionApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getProjects: builder.query<ProjectResponse, JSONObject>({\n query: (graphQLParams) => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(graphQLParams),\n }),\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n projects: response.data.project,\n };\n },\n }),\n getSubmissions: builder.query<SubmissionQueryResponse, void>({\n query: () => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n query: SubmissionGraphqlQuery,\n }),\n }),\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n transactionList: response.data.transactionList,\n };\n },\n }),\n getProjectsDetails: builder.query<\n ProjectDetailsQueryResponse,\n ProjectsListRequestParams\n >({\n async queryFn(args, _queryApi, _extraOptions, fetchWithBQ) {\n // get the list of projects\n const projectsResponse = await fetchWithBQ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(args.projectQuery),\n });\n if (projectsResponse.error)\n return { error: projectsResponse.error as FetchBaseQueryError };\n\n const projects = (projectsResponse as ProjectFetchQueryResponse)?.data\n .data.project;\n const projectIds = projects.map((p) => p.project_id);\n\n // given the list of projects, get all of them by executing the projectDetailsQuery for each project\n const projectDetails = await Promise.all(\n projectIds.map(async (projectId) => {\n const result = await fetchWithBQ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n ...args.projectDetailsQuery,\n variables: {\n name: projectId,\n },\n }),\n });\n const { project, ...values } = (\n result as ProjectDetailsFetchQueryResponse\n ).data.data;\n\n return result.data\n ? {\n data: args.mapping\n ? ({\n ...extractValuesFromObject(\n args.mapping,\n values as JSONObject,\n ),\n project: project[0],\n } as ProjectDetailsResults)\n : ({\n ...values,\n project: project[0],\n } as ProjectDetailsResults),\n }\n : { error: result.error };\n }),\n );\n\n // if any of the projectDetails has an error, return the error\n if (projectDetails.some((detail) => 'error' in detail)) {\n return {\n error: projectDetails.find(\n (detail) => 'error' in detail,\n ) as FetchBaseQueryError,\n };\n } else\n return {\n data: {\n details: projectDetails.reduce((acc, detail) => {\n acc.push(\n detail.data ?? {\n project: {\n name: '',\n id: '',\n code: '',\n },\n },\n );\n return acc;\n }, [] as ProjectDetailsResults[]),\n hits: projectIds.length, // TODO this needs to be changed to show the total number of projects\n },\n };\n },\n }),\n getSubmissionGraphQL: builder.query<\n SubmissionGraphqlResponse,\n SubmissionGraphqlParams\n >({\n query: (graphQLParams) => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n query: graphQLParams.query,\n ...(graphQLParams.variables\n ? { variables: graphQLParams.variables }\n : {}),\n }),\n }),\n transformResponse: (response: Record<string, any>, _meta, params) => {\n if (params.mapping) {\n return {\n data: extractValuesFromObject(params.mapping, response.data),\n };\n }\n return response.data;\n },\n }),\n getDictionary: builder.query<SubmissionGraphqlResponse, void>({\n query: () => ({\n url: `${GEN3_SUBMISSION_API}/_dictionary/_all/`,\n }),\n }),\n }),\n});\n\nexport const {\n useGetProjectsQuery,\n useGetSubmissionGraphQLQuery,\n useGetProjectsDetailsQuery,\n useLazyGetProjectsQuery,\n useLazyGetSubmissionGraphQLQuery,\n useGetSubmissionsQuery,\n useGetDictionaryQuery,\n} = submissionApi;\n","import { gen3Api } from '../gen3';\nimport { GEN3_WORKSPACE_API } from '../../constants';\nimport {\n PayModel,\n PodStatus,\n WorkspaceInfo,\n WorkspaceInfoResponse,\n WorkspaceOptions,\n WorkspaceOptionsResponse,\n WorkspacePayModelResponse,\n WorkspaceStatus,\n WorkspaceStatusResponse,\n} from './types';\nimport { selectActiveWorkspaceStatus } from './workspaceSlice';\nimport { CoreState } from '../../reducers';\nimport { isFetchParseError, isHttpStatusError } from '../../types';\nimport { createSelector } from '@reduxjs/toolkit';\n\ninterface WorkspacePayModelRawResponse {\n current_pay_model: PayModel;\n all_pay_models: Array<PayModel>;\n}\n\nconst WorkspaceWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Workspace', 'PayModel'],\n});\n\nexport const EmptyWorkspaceStatusResponse: WorkspaceStatusResponse = {\n status: WorkspaceStatus.NotFound,\n conditions: [],\n containerStates: [],\n idleTimeLimit: 0,\n lastActivityTime: 0,\n workspaceType: '',\n};\n\nexport const workspacesApi = WorkspaceWithTags.injectEndpoints({\n endpoints: (builder) =>\n ({\n getWorkspaceOptions: builder.query<WorkspaceOptions, void>({\n query: () => `${GEN3_WORKSPACE_API}/options`,\n transformResponse: (response: WorkspaceOptionsResponse) => {\n return response.map((workspace: WorkspaceInfoResponse) => {\n return {\n id: workspace.id,\n name: workspace.name,\n idleTimeLimit: workspace['idle-time-limit'],\n memoryLimit: workspace['memory-limit'],\n cpuLimit: workspace['cpu-limit'],\n } as WorkspaceInfo;\n });\n },\n }),\n getWorkspacePayModels: builder.query<WorkspacePayModelResponse, void>({\n query: () => `${GEN3_WORKSPACE_API}/allpaymodels`,\n providesTags: ['PayModel'],\n transformResponse: (response: WorkspacePayModelRawResponse) => {\n return {\n currentPayModel: response.current_pay_model,\n allPayModels: response.all_pay_models,\n noPayModel: false,\n };\n },\n }),\n getActivePayModel: builder.query<PayModel, void>({\n query: () => `${GEN3_WORKSPACE_API}/paymodels`,\n providesTags: ['PayModel'],\n }),\n setCurrentPayModel: builder.mutation<void, string>({\n query: (id: string) => ({\n url: `${GEN3_WORKSPACE_API}/setpaymodel`,\n method: 'POST',\n body: id,\n invalidatesTags: ['PayModel'],\n }),\n }),\n getWorkspaceStatus: builder.query<WorkspaceStatusResponse, void>({\n queryFn: async (_arg0, queryApi, _extraOptions, fetchWithBQ) => {\n const currentWorkspaceStatus = selectActiveWorkspaceStatus(\n queryApi.getState() as CoreState,\n );\n\n const workspaceStatus = await fetchWithBQ(\n `${GEN3_WORKSPACE_API}/status`,\n );\n if (workspaceStatus.error) {\n return workspaceStatus;\n }\n\n // TODO: Find out IF this is code is required\n const workspaceStatusData =\n workspaceStatus.data as unknown as WorkspaceStatusResponse;\n\n if (\n workspaceStatusData.status === WorkspaceStatus.Running &&\n (currentWorkspaceStatus === 'Not Found' ||\n currentWorkspaceStatus === 'Launching')\n ) {\n const proxyStatus = await fetchWithBQ(\n `${GEN3_WORKSPACE_API}/proxy/`,\n );\n let statusError = undefined;\n if (isFetchParseError(proxyStatus.error)) {\n statusError = proxyStatus.error.originalStatus;\n }\n\n if (isHttpStatusError(proxyStatus.error)) {\n statusError = proxyStatus.error.status;\n }\n\n if (statusError && statusError !== 200) {\n return {\n data: {\n ...workspaceStatusData,\n status: WorkspaceStatus.Launching,\n conditions: [\n {\n type: 'ProxyConnected',\n status: PodStatus.False,\n },\n ],\n } as WorkspaceStatusResponse,\n };\n }\n }\n return { data: workspaceStatus.data as WorkspaceStatusResponse };\n },\n providesTags: ['Workspace'],\n }),\n launchWorkspace: builder.mutation<boolean, string>({\n query: (id) => {\n return {\n url: `${GEN3_WORKSPACE_API}/launch?id=${id}`,\n method: 'POST',\n invalidatesTags: ['Workspace'],\n responseHandler: (response) => response.text(),\n };\n },\n transformResponse: async (response: string) => {\n return !!(response && response === 'Success');\n },\n }),\n terminateWorkspace: builder.mutation<void, void>({\n query: () => ({\n url: `${GEN3_WORKSPACE_API}/terminate`,\n method: 'POST',\n invalidatesTags: ['Workspace'],\n responseHandler: (response) => response.text(),\n }),\n }),\n }) as const,\n});\n\nexport const {\n useGetWorkspaceOptionsQuery,\n useGetWorkspacePayModelsQuery,\n useGetWorkspaceStatusQuery,\n useGetActivePayModelQuery,\n useSetCurrentPayModelMutation,\n useLaunchWorkspaceMutation,\n useTerminateWorkspaceMutation,\n} = workspacesApi;\n\nexport const workspaceStatusSelector =\n workspacesApi.endpoints.getWorkspaceStatus.select();\n\nexport const selectWorkspaceStatusFromService = createSelector(\n workspaceStatusSelector,\n (status) =>\n status.data ?? {\n ...EmptyWorkspaceStatusResponse,\n },\n);\n\nexport const selectWorkspaceStatus = createSelector(\n workspaceStatusSelector,\n (status) => status?.data?.status ?? WorkspaceStatus.NotFound,\n);\n\nexport const paymodelStatusSelector =\n workspacesApi.endpoints.getWorkspacePayModels.select();\n\nexport const selectPaymodelStatus = createSelector(\n paymodelStatusSelector,\n (status) => status,\n);\n","import { WorkspaceStatus } from './types';\n\nexport const isWorkspaceActive = (status: WorkspaceStatus) =>\n status === WorkspaceStatus.Running ||\n status === WorkspaceStatus.Launching ||\n status === WorkspaceStatus.Terminating;\n\nexport const isWorkspaceRunningOrStopping = (status: WorkspaceStatus) =>\n status === WorkspaceStatus.Running || status === WorkspaceStatus.Terminating;\n","export type RegistryTypes = string | number | boolean;\n\nclass ConfigRegistry<T = Record<string, RegistryTypes>> {\n private config: T | null = null;\n\n init(config: T): void {\n if (this.config !== null) {\n console.warn('Gen3ConfigRegistry already initialized');\n return;\n }\n\n this.config = Object.freeze({ ...config });\n }\n\n get<K extends keyof T>(key: K): T[K] {\n if (!this.config) {\n throw new Error('ConfigRegistry not initialized');\n }\n return this.config[key];\n }\n\n getAll(): Readonly<T> {\n if (!this.config) {\n throw new Error('ConfigRegistry not initialized');\n }\n return this.config;\n }\n}\n\nexport const configRegistry = new ConfigRegistry();\n"],"names":["GEN3_COMMONS_NAME","process","env","NEXT_PUBLIC_GEN3_COMMONS_NAME","GEN3_API","NEXT_PUBLIC_GEN3_API","GEN3_DOMAIN","NEXT_PUBLIC_GEN3_DOMAIN","GUID_PREFIX_PATTERN","GEN3_GUPPY_API","NEXT_PUBLIC_GEN3_GUPPY_API","GEN3_MDS_API","NEXT_PUBLIC_GEN3_MDS_API","GEN3_DOWNLOADS_ENDPOINT","NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT","GEN3_FENCE_API","NEXT_PUBLIC_GEN3_FENCE_API","GEN3_FENCE_SERVICE","GEN3_AI_SEARCH_API","NEXT_PUBLIC_GEN3_AI_SEARCH_API","GEN3_AUTHZ_API","NEXT_PUBLIC_GEN3_AUTHZ_API","GEN3_AUTHZ_SERVICE","GEN3_REDIRECT_URL","NEXT_PUBLIC_GEN3_REDIRECT_URL","GEN3_WORKSPACE_API","NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API","GEN3_SUBMISSION_API","NEXT_PUBLIC_GEN3_SUBMISSION_API","GEN3_WTS_API","NEXT_PUBLIC_GEN3_WTS_API","GEN3_DATA_LIBRARY_API","NEXT_PUBLIC_GEN3_DATA_LIBRARY_API","GEN3_CROSSWALK_API","NEXT_PUBLIC_GEN3_CROSSWALK_API","GEN3_SOWER_API","NEXT_PUBLIC_GEN3_SOWER_API","GEN3_MANIFEST_API","NEXT_PUBLIC_GEN3_MANIFEST_API","GEN3_REQUESTOR_API","NEXT_PUBLIC_GEN3_REQUESTOR_API","Accessibility","FILE_FORMATS","JSON","TSV","CSV","FILE_DELIMITERS","tsv","csv","CART_LIMIT","isFetchError","obj","url","status","statusText","text","buildFetchError","res","request","fetchFence","endpoint","headers","body","method","isJSON","useService","fetch","credentials","stringify","ok","data","json","userAuthApi","createApi","reducerPath","refetchOnMountOrArgChange","refetchOnReconnect","baseQuery","getState","results","csrfToken","selectCSRFToken","accessToken","undefined","NODE_ENV","getCookie","Accept","Authorization","_e","endpoints","builder","fetchUserDetails","query","transformResponse","response","loginStatus","username","getCSRF","queryFn","jsonData","token","csrf","error","Error","message","EMPTY_USER","useFetchUserDetailsQuery","useLazyFetchUserDetailsQuery","useGetCSRFQuery","useLazyGetCSRFQuery","userAuthApiMiddleware","middleware","userAuthApiReducerPath","userAuthApiReducer","reducer","selectUserDetailsFromState","select","selectUserDetails","createSelector","userDetails","selectUserAuthStatus","userLoginState","QueryStatus","pending","uninitialized","selectCSRFTokenData","passThroughTheState","state","selectHeadersWithCSRFToken","gen3Api","fetchBaseQuery","baseUrl","prepareHeaders","set","validateStatus","gen3ServicesReducer","gen3ServicesReducerMiddleware","useCoreSelector","useSelector","withTypes","useCoreDispatch","useDispatch","fetchUserState","createAsyncThunk","_","meta","isAuthenticated","isPending","initialState","slice","createSlice","name","reducers","resetUserState","extraReducers","addCase","fulfilled","action","payload","rejected","userReducer","actions","selectUserData","user","selectUser","selectUserLoginStatus","useIsUserLoggedIn","useUserAuth","renew","coreDispatch","useEffect","isUninitialized","isFetching","isSuccess","isError","REGISTRY","registerGen3App","id","gen3App","lookupGen3App","gen3Apps","addGen3AppMetadata","requiredEntityTypes","gen3AppReducer","selectGen3AppMetadataByName","appName","selectGen3AppByName","setDRSHostnames","_state","drsHostnamesReducer","drsHostnamesSelector","drsHostnames","Modals","currentModal","showModal","modal","hideModal","modalReducer","selectCurrentModal","modals","selectCurrentMessage","WorkspaceStatus","RequestedWorkspaceStatus","PodConditionType","PodStatus","getCurrentTimestamp","Date","now","getTimeDifferenceMs","startTime","endTime","isTimeGreaterThan","minutes","diffMs","diffMinutes","getTimestamp","toLocaleString","NO_WORKSPACE_ID","NotFound","requestedStatus","Unset","requestedStatusTimestamp","setActiveWorkspaceId","clearActiveWorkspaceId","setActiveWorkspaceStatus","setRequestedWorkspaceStatus","setActiveWorkspace","activeWorkspaceReducer","selectActiveWorkspaceId","activeWorkspace","selectActiveWorkspaceStatus","selectRequestedWorkspaceStatus","selectRequestedWorkspaceStatusTimestamp","cartAdapter","createEntityAdapter","selectId","item","getInitialState","cartSlice","addItemsToCart","addMany","removeItemsFromCart","removeMany","cartReducer","selectById","selectCartItem","selectIds","selectCartItems","selectAll","selectCart","selectTotal","selectCartCount","getSelectors","cart","cartReducerPath","externalLoginApi","injectEndpoints","getExternalLogins","isExternalConnected","idp","useGetExternalLoginsQuery","useLazyGetExternalLoginsQuery","useLazyIsExternalConnectedQuery","useIsExternalConnectedQuery","ResolveDRSError","resolveDRSWithDataGUISOrg","guidsForHostnameResolution","INVALID_INPUT_ERROR","RESOLVE_DRS_ERROR","Array","isArray","every","guid","responses","Promise","allSettled","map","reduce","acc","index","value","resolveCachedDRS","coreStore","resolvedIds","hostname","DRS_Resolvers","dataGUISOrg","cached","resolveDRSObjectId","resolver","isNotDefined","x","isObject","isString","prepareUrl","apiUrl","URL","HttpMethod","DEFAULT_METHOD","CONTENT_TYPE_HEADER","CONTENT_TYPE_JSON","HTTPErrorMessages","HTTPError","responseData","fetchFencePresignedURL","onAbort","signal","Headers","errorMessage","errorData","getCSRFToken","requestHeaders","fetchJSONDataFromURL","requiresCSRF","includes","toUpperCase","errorBody","extractValuesFromObject","jsonPathMappings","result","extractObjectValue","jsonPath","extractedValues","JSONPath","path","length","key","Object","keys","ExtractValueFromObject","valueIfNotFound","DAYS_IN_YEAR","convertToHistogramDataAsStringKey","count","calculatePercentageAsNumber","total","calculatePercentageAsString","toFixed","capitalize","original","customCapitalizations","uuid","dna","dbsnp","cosmic","civic","dbgap","ecog","bmi","gdc","cnv","ssm","aa","split","word","toLowerCase","charAt","join","humanify","term","cap","facetTerm","humanified","replace","trim","ageDisplay","ageInDays","yearsOnly","defaultValue","calculateYearsAndDays","years","days","ABS_AGE_DAYS","Math","abs","remainingDays","floor","ceil","formattedYears","formattedDays","ageString","filter","Boolean","stringifyJSONParam","defaults","queryWTSFederatedLoginStatus","GET","providers","gatherGUIDPrefixes","selectedFiles","selectedFile","object_id","guidDomainPrefix","match","shift","push","resolveDRSPrefixes","guidPrefixes","resolveGUIDsInSelectedFiles","externalHosts","resolvedFiles","unresolvedFiles","resolvedDRSPrefixes","unresolvedIds","forEach","drsPrefix","fetchExternalLogins","externalProviders","unauthenticatedProviders","provider","refresh_token_expiration","guidResolutions","providersToAuthenticate","unauthenticatedProvider","values","base_url","missingProviders","useGetFederatedLoginStatus","wtsResults","isLoading","wstIsLoading","wtsError","setResult","useState","fetchData","getFederatedLoginStatus","guppyApi","api","errors","locations","e","GraphQLError","guppyAPISliceMiddleware","guppyApiSliceReducerPath","guppyApiReducer","isFilterSet","input","root","mode","isIncludes","o","operator","isUnion","operands","isIntersection","isIntersectionOrUnion","isOperandsType","operation","ifOperationWithField","field","isNestedFilter","isIndexedFilterSetEmpty","filters","filterSet","EmptyFilterSet","isOperationWithField","isOperatorWithFieldAndArrayOfOperands","extractFilterValue","op","valueExtractorHandler","ValueExtractorHandler","handleOperation","extractEnumFilterValue","enumValueExtractorHandler","EnumValueExtractorHandler","assertNever","handler","handleEquals","handleNotEquals","handleLessThan","handleLessThanOrEquals","handleGreaterThan","handleGreaterThanOrEquals","handleIntersection","handleUnion","handleNestedFilter","handleIncludes","handleExcludeIfAny","handleExcludes","handleExists","handleMissing","isFilterEmpty","fs","isEqual","isGQLIntersection","and","isGQLUnion","or","ToGqlHandler","operand","in","exclude","excludeifany","convertFilterToGqlFilter","is","not","child","nested","convertFilterSetToGqlFilter","toplevelOp","fsKeys","handleGqlOperation","operationKeys","convertGqlFilterToFilter","gqlFilter","ToOperationHandler","entries","_arg","appendFilterToOperation","addition","filterSetToOperation","k","buildNestedGQLFilter","leafOperand","parentPath","splitFieldArray","nextField","console","warn","currentPath","buildNestedFilterForOperation","FieldNameOverrides","gender","Gender","COMMON_PREPOSITIONS","s","trimFirstFieldNameToTitle","fieldName","source","indexOf","fieldNameToTitle","sections","flat","extractIndexFromFullFieldName","prependIndexToFieldName","extractFieldNameFromFullFieldName","extractIndexAndFieldNameFromFullFieldName","rest","defaultCohortNameGenerator","timeZone","hour12","isNameUnique","entities","excludeId","trimmedName","some","cohort","generateUniqueName","baseName","trimmedBaseName","counter","uniqueName","extractFiltersWithPrefixFromFilterSet","prefix","startsWith","DEFAULT_COHORT_NAME","newCohort","customName","ts","toISOString","newName","newId","createCohortId","modified","saved","createdDatetime","modifiedDatetime","counts","nanoid","customAlphabet","cohortsAdapter","sortComparer","a","b","initialCohort","emptyInitialState","currentCohortId","setOne","getCurrentCohortId","cohortManagerSlice","createNewCohort","addOne","setAsCurrent","updateCohortName","updateOne","changes","removeCohort","cohortId","removedCohortName","totalCohorts","removeAll","defaultCohort","shouldShowMessage","removeOne","remainingIds","updateCohortFilter","setCohortFilter","setCohortIndexFilters","removeCohortFilter","_a","updated","duplicateCohort","currentCohort","duplicatedCohort","clearCohortFilters","updateCohortCounts","updateCohortIndexCountById","setCurrentCohortId","setCohortList","ids","upsertMany","cohortSelectors","cohorts","cohortManager","cohortReducer","expandSlice","toggleCohortBuilderCategoryFilter","expanded","toggleCohortBuilderAllFilters","expand","cohortBuilderFiltersExpandedReducer","selectCohortFilterExpanded","filtersExpanded","selectAllCohortFiltersCollapsed","setCohortFilterCombineMode","cohortBuilderFiltersCombineModeReducer","selectCohortFilterCombineMode","filtersCombineMode","shouldShareFilters","sharedFiltersMap","cohortSharedFiltersSlice","setShouldShareFilters","setSharedFilters","selectShouldShareFilters","sharedFilters","selectSharedFilters","selectSharedFiltersForFields","cohortSharedFiltersReducer","cohortReducers","combineReducers","rootReducer","gen3Services","flattenJson","flattenedJson","flatten","delimiter","conversion","config","Papa","unparse","jsonToFormat","format","flatJson","isHistogramRangeData","isJSONObject","isJSONValue","isJSONValueArray","isValidObject","isHistogramData","isHistogramDataArray","histogram","isHistogramDataCollection","isGuppyAggregationData","isHistogramDataAnEnum","isStatsValue","numericFields","percentiles","pObj","requiredPercentiles","p","isStatsValuesArray","isHistogramDataAArray","isHistogramDataArrayAnEnum","isHistogramDataArrayARange","isFetchBaseQueryError","isErrorWithMessage","isHttpStatusError","isFetchParseError","prepareFetchConfig","parameters","type","accessibility","fields","sort","downloadFromGuppyToBlob","onStart","onDone","onError","fetchConfig","toString","then","rootPath","resultType","str","convertedData","Blob","blob","catch","downloadJSONDataFromGuppy","groupSharedFields","reverseIndex","rootKey","Set","add","indexSet","size","from","processHistogramResponse","valueData","pointerData","element","idx","roundHistogramResponse","origData","minValue","histogramData","customQueryStrForField","depth","indent","repeat","splittedFieldArray","splittedField","histogramQueryStrForEachField","statsQueryStrForEachField","nestedHistogramQueryStrForEachField","mainField","numericAggAsText","rawDataQueryStrForEachField","splitField","convertNumericFromToArrayToFilters","range","isNested","to","asTextHistogram","middleQuery","buildAliasedNestedCountsQuery","rangeName","dataParams","dataTypeLine","processedFields","buildRangeFilters","ranges","rangeBaseName","rangeValue","buildRangeQuery","indexPrefix","rangeFilters","rangeKey","rangeQuery","selectAllCohorts","selectTotalCohorts","selectCohortById","selectCohortIds","getCurrentCohortFromCoreState","selectCohortFilters","selectCurrentCohortFilters","selectCurrentCohortId","selectCurrentCohort","selectCurrentCohortName","selectIndexedFilterByName","selectAvailableCohorts","selectCurrentCohortModified","selectCurrentCohortSaved","selectAvailableCohortByName","find","selectIndexFilters","ToGqlAllNested","leafField","at","convertFilterToNestedGqlFilter","convertFilterSetToNestedGqlFilter","statusEndpoint","fetchJson","useGetStatus","fetcher","useSWR","explorerTags","enhanceEndpoints","addTagTypes","explorerApi","getAllFieldsForType","_meta","params","getAccessibleData","fieldParts","getRawDataAndTotalCounts","offset","ALL","filterName","queryLine","typeAggsLine","variables","transformErrorResponse","_aggregation","args","containsDots","f","containsDotsUniqueBase","partsArr","basePart","tempResponse","tempItem","i","subRows","hasOwn","providesTags","getAggs","filterSelf","buildGetAggregationQuery","buckets","_totalCount","getStatsAggregations","queryId","buildGetStatsAggregationQuery","getSubAggs","termsFields","missingFields","nestedAggFields","getCounts","gqlFilters","getFieldCountSummary","getFieldsForIndex","getSharedFieldsForIndex","indices","customRange","queryData","generalGQL","useGetArrayTypes","useGetIndexFields","useGetFieldsForIndexQuery","queryStart","queryBody","useGetRawDataAndTotalCountsQuery","useGetAccessibleDataQuery","useGetAllFieldsForTypeQuery","useGetAggsQuery","useLazyGetAggsQuery","useGetStatsAggregationsQuery","useLazyGetStatsAggregationsQuery","useGetSubAggsQuery","useGetCountsQuery","useLazyGetCountsQuery","useGetFieldCountSummaryQuery","useGetSharedFieldsForIndexQuery","useGeneralGQLQuery","useLazyGeneralGQLQuery","useCustomRangeQuery","useLazyCustomRangeQuery","coreStoreListenerMiddleware","createListenerMiddleware","startCoreListening","startListening","matcher","isAnyOf","matchFulfilled","effect","listenerApi","arg","originalArgs","dispatch","createNoopStorage","getItem","_key","resolve","setItem","removeItem","storage","window","createWebStorage","fetchArboristResources","resources","persistConfig","version","whitelist","persistedReducer","persistReducer","setupCoreStore","preloadedState","configureStore","getDefaultMiddleware","serializableCheck","ignoredActions","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","concat","prepend","setupListeners","persistor","persistStore","CoreProvider","children","Provider","store","PersistGate","loading","usePrevious","ref","useRef","current","createUseCoreDataHook","fetchDataActionCreator","dataSelector","prevParams","aiSearchApi","askQuestion","mutation","searchParams","topic","conversationId","conversation_id","documents","getAISearchStatus","getAISearchVersion","useAskQuestionMutation","useGetAISearchStatusQuery","useGetAISearchVersionQuery","TAGS","authzTags","authzApi","getAuthzMappings","getAuthzResources","createAuthzResource","invalidatesTags","useGetAuthzMappingsQuery","useLazyGetAuthzMappingsQuery","useGetAuthzResourcesQuery","useLazyGetAuthzResourcesQuery","useCreateAuthzResourceMutation","selectAuthzMapping","selectAuthzMappingData","authzMapping","mappings","CohortStorage","databaseName","storeName","schemaVersion","getDb","openDB","upgrade","db","objectStoreNames","contains","createObjectStore","keyPath","saveCohort","tx","transaction","objectStore","put","done","_error","saveCohorts","all","getCohort","get","getAllCohorts","savedCohorts","getAll","searchCohortsByName","searchTerm","allCohorts","searchLower","getCohortCount","updateCohort","existing","timestamp","deleteCohort","delete","deleteAllCohorts","clear","cohortExists","exportCohorts","importCohorts","overwrite","close","isFileItem","isAdditionalDataItem","itemType","isCohortItem","isDatalistAPI","created_time","updated_time","authz","items","isDataLibraryAPIResponse","lists","DataLibraryStoreMode","processItem","description","documentationUrl","buildListItemsGroupedByDataset","listData","cohortData","schema_version","dataset_guid","members","BuildList","listId","BuildLists","list","getNumberOfItemsInDatalist","dataList","fileCount","flattenDataList","convertDatasetOrCohortToLibraryListItemsAPI","datasetId","memberId","memberData","convertDataLibraryToDataLibraryAPI","dataLibrary","extractIndexFromDataLibraryCohort","parsedQuery","parse","aggregationField","definitions","def","kind","flatMap","selectionSet","selections","sel","indexField","extractFileDatasetsInRecords","dataFieldMapping","resource","dataObjects","dataObjectField","datasetIdField","datafiles","dataAcc","dataObject","fileId","dataObjectIdField","dataObjectNameField","dataObjectSizeField","sizeString","md5Sum","dataObjectMd5sumField","dataObjectUrlField","fileType","dataObjectFileTypeValue","dataObjectFileTypeField","md5sum","DATABASE_NAME","STORE_NAME","LocalStorageService","getList","getLists","listMap","datalists","addList","creator","updateList","update","deleteList","clearLists","cacheLists","allLists","cacheList","setAllLists","fetchFromDataLibraryAPI","detail","responseFromMutation","responseReceived","APIStorageService","apiBaseUrl","pendingRequests","Map","dedupedRequest","requestKey","has","requestPromise","PUT","DELETE","POST","CachedAPIService","localStorageDataLibrary","apiDataLibrary","apiResults","getCachedLists","cacheResults","DataLibraryStorageService","ApiOnly","storageService","ApiAndLocal","setStorageMode","EMPTY_LIST","DEFAULT_LIST_NAME","useDataLibrary","options","storageMode","setIsLoading","isUpdating","setIsUpdating","setError","setLists","hasInitializedRef","refreshLists","useCallback","applyOperationResult","runOperation","updatingId","createUniqueListName","preferredName","existingNames","candidate","initialize","addListToDataLibrary","apiItems","updateListInDataLibrary","flattened","deleteListFromDataLibrary","clearLibrary","setAllListsInDataLibrary","flattenedLists","getDatalist","useDeepCompareMemo","loginProvidersApi","getLoginProviders","getDownload","getPresignedUrl","what","useGetLoginProvidersQuery","useGetDownloadQuery","useLazyGetDownloadQuery","useGetPresignedUrlQuery","useLazyGetPresignedUrlQuery","logoutFence","redirect","credentialsWithTags","credentialsApi","getCredentials","addNewCredential","scope","removeCredential","authorizeFromCredentials","api_key","key_id","useGetCredentialsQuery","useAddNewCredentialMutation","useRemoveCredentialMutation","useAuthorizeFromCredentialsMutation","jwtApi","getJWKKeys","useGetJWKKeysQuery","GEN3_APP_NAMESPACE","getGen3AppId","nameVersion","uuidv5","createGen3App","App","Gen3AppWrapper","props","document","title","createAppStore","devTools","context","React","createContext","useAppSelector","createSelectorHook","useAppDispatch","createDispatchHook","useAppStore","createStoreHook","AppStore","AppContext","createGen3AppWithOwnStore","CookiesProvider","createAppApiForRTKQ","additionalReducers","appContext","appCreateApi","buildCreateApi","coreModule","reactHooksModule","hooks","useStore","appRTKQApi","appMiddleware","appStore","appApi","graphQLWithTags","graphQLAPI","graphQL","graphQLParams","useGraphQLQuery","guppyDownloadApi","downloadFromGuppy","cache","useDownloadFromGuppyQuery","useLazyDownloadFromGuppyQuery","manifestTags","manifestApi","getManifestServiceStatus","getFileManifest","getFileFromManifest","addFileManifest","manifest","filename","getCohortManifest","addCohortManifest","getMetadataManifest","getMetadataFromManifest","addMetadataManifest","useGetManifestServiceStatusQuery","useLazyGetManifestServiceStatusQuery","useGetFileManifestQuery","useGetCohortManifestQuery","useGetMetadataManifestQuery","useGetFileFromManifestQuery","useGetMetadataFromManifestQuery","useAddCohortManifestMutation","useAddFileManifestMutation","useAddMetadataManifestMutation","HasEnoughData","limit","numEmptyKeys","metadataApi","getAggMDS","pageSize","objValues","firstValue","studyField","hits","pagination","getIndexAggMDS","dataFromIndexes","indexKeys","objIds","filterEmpty","gen3MDSGUID","getMDS","guidType","getTags","getData","getMetadataById","getCrosswalkData","_queryApi","_extraOptions","fetchWithBQ","queryMultiple","queue","Queue","concurrency","callback","toData","toPaths","dataPath","reject","start","err","useGetAggMDSQuery","useGetMDSQuery","useGetTagsQuery","useGetDataQuery","useGetMetadataByIdQuery","useGetCrosswalkDataQuery","useLazyGetCrosswalkDataQuery","useGetIndexAggMDSQuery","queryMultipleMDSRecords","guids","useAggMDS","MissingServiceConfigurationError","serviceName","defaultLogger","DefaultRemoteSupportAction","RemoteSupportServiceRegistry","logger","services","registerService","getSupportService","service","hasService","getRegisteredServices","unregisterService","defaultRegistryInstance","getRemoteSupportServiceRegistry","ZENDESK_MAX_SUBJECT_LENGTH","ZENDESK_DOMAIN","NEXT_PUBLIC_GEN3_ZENDESK_API","createZendeskTicket","subject","fullName","email","contents","configuration","zendeskSubdomainName","zendeskTicketCreationURL","ticketSubject","substring","comment","requester","registerDefaultRemoteSupport","registry","convertToQueryString","queryParts","policy_ids","encodeURIComponent","resource_ids","revoke","requestorApi","strParams","userRequest","requestById","requestId","createRequest","useCreateRequestMutation","useRequestQuery","useLazyRequestQuery","useStatusQuery","useRequestorStatusQuery","useRequestByIdQuery","useUserRequestQuery","loadingStatusApi","getSowerJobList","submitSowerJob","getSowerJobStatus","uid","getSowerOutput","getSowerServiceStatus","useGetSowerJobListQuery","useLazyGetSowerJobListQuery","useSubmitSowerJobMutation","useGetSowerJobStatusQuery","useGetSowerOutputQuery","useGetSowerServiceStatusQuery","resourcePathFromProjectID","projectID","program","project","resourcePath","isRootUrl","urlFragment","isProgramUrl","userHasSheepdogProgramAdmin","userAuthMapping","userHasSheepdogProjectAdmin","projectCodeFromResourcePath","listifyMethodsFromMapping","accumulator","currval","userHasDataUpload","actionIsFileUpload","userHasMethodForServiceOnResource","userHasMethodForServiceOnProject","userHasMethodOnAnyProject","actionHasMethod","actionArrays","hasMethod","userHasCreateOrUpdateOnAnyProject","SubmissionGraphqlQuery","submissionApi","getProjects","projects","getSubmissions","transactionList","getProjectsDetails","projectsResponse","projectQuery","projectIds","project_id","projectDetails","projectId","projectDetailsQuery","mapping","details","code","getSubmissionGraphQL","getDictionary","useGetProjectsQuery","useGetSubmissionGraphQLQuery","useGetProjectsDetailsQuery","useLazyGetProjectsQuery","useLazyGetSubmissionGraphQLQuery","useGetSubmissionsQuery","useGetDictionaryQuery","WorkspaceWithTags","EmptyWorkspaceStatusResponse","conditions","containerStates","idleTimeLimit","lastActivityTime","workspaceType","workspacesApi","getWorkspaceOptions","workspace","memoryLimit","cpuLimit","getWorkspacePayModels","currentPayModel","current_pay_model","allPayModels","all_pay_models","noPayModel","getActivePayModel","setCurrentPayModel","getWorkspaceStatus","_arg0","queryApi","currentWorkspaceStatus","workspaceStatus","workspaceStatusData","Running","proxyStatus","statusError","originalStatus","Launching","False","launchWorkspace","responseHandler","terminateWorkspace","useGetWorkspaceOptionsQuery","useGetWorkspacePayModelsQuery","useGetWorkspaceStatusQuery","useGetActivePayModelQuery","useSetCurrentPayModelMutation","useLaunchWorkspaceMutation","useTerminateWorkspaceMutation","workspaceStatusSelector","selectWorkspaceStatusFromService","selectWorkspaceStatus","paymodelStatusSelector","selectPaymodelStatus","isWorkspaceActive","Terminating","isWorkspaceRunningOrStopping","ConfigRegistry","init","freeze","configRegistry"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/constants.ts","../../src/features/fence/utils.ts","../../src/features/fence/fetchFence.ts","../../src/features/user/userSliceRTK.ts","../../src/features/gen3/gen3Api.ts","../../src/hooks.ts","../../src/features/user/userSlice.ts","../../src/features/gen3Apps/gen3AppRegistry.ts","../../src/features/gen3Apps/gen3AppsSlice.ts","../../src/features/drsResolver/drsHostnameSlice.ts","../../src/features/modals/modalsSlice.ts","../../src/features/workspace/types.ts","../../src/utils/time.ts","../../src/features/workspace/workspaceSlice.ts","../../src/features/cart/cartSlice.ts","../../src/features/cart/cartSelectors.ts","../../src/features/cart/index.ts","../../src/features/user/externalLoginsSlice.ts","../../src/features/drsResolver/resolvers/dataGUIDSDotOrg.ts","../../src/features/drsResolver/resolvers/cachedDRSResolver.ts","../../src/features/drsResolver/utils.ts","../../src/utils/ts-utils.ts","../../src/utils/url.ts","../../src/utils/fetch.ts","../../src/utils/extractvalues.ts","../../src/utils/conversions.ts","../../src/features/user/utils.ts","../../src/features/user/hooks.ts","../../src/features/guppy/guppyApi.ts","../../src/features/filters/types.ts","../../src/features/filters/filters.ts","../../src/features/filters/utils.ts","../../src/features/cohort/utils.ts","../../src/features/cohort/cohortManagerSlice.ts","../../src/features/cohort/filterExpandSlice.ts","../../src/features/cohort/filterCombineModeSlice.ts","../../src/features/cohort/sharedFiltersSlice.ts","../../src/features/cohort/reducers.ts","../../src/reducers.ts","../../src/features/guppy/conversion.ts","../../src/types/types.ts","../../src/features/guppy/utils.ts","../../src/features/guppy/processing.ts","../../src/features/guppy/queryGenerators.ts","../../src/features/guppy/range.ts","../../src/features/cohort/cohortManagerSelector.ts","../../src/features/filters/nestedFilters.ts","../../src/features/guppy/guppySlice.ts","../../src/listeners.ts","../../src/storage-persist.ts","../../src/features/authz/fetchAuthz.ts","../../src/store.ts","../../src/provider.tsx","../../src/dataAccess.ts","../../src/features/aiSearch/aiSearchSlice.ts","../../src/features/authz/authzMappingSlice.ts","../../src/features/cohort/storage/CohortStorage.ts","../../src/features/dataLibrary/types.ts","../../src/features/dataLibrary/utils.ts","../../src/features/dataLibrary/storage/LocalStorageService.ts","../../src/features/dataLibrary/storage/APIStorageService.ts","../../src/features/dataLibrary/storage/CachedAPIStorageService.ts","../../src/features/dataLibrary/storage/DataLibraryStorageService.ts","../../src/features/dataLibrary/useDataLibrary.ts","../../src/features/fence/fenceApi.ts","../../src/features/fence/credentialsApi.ts","../../src/features/fence/jwtApi.ts","../../src/features/gen3Apps/constants.ts","../../src/features/gen3Apps/Gen3App.tsx","../../src/features/gen3Apps/Gen3AppRTKQ.ts","../../src/features/graphQL/graphQLSlice.ts","../../src/features/guppy/guppyDownloadSlice.ts","../../src/features/manifest/manifestApi.ts","../../src/features/metadata/metadataSlice.ts","../../src/features/metadata/utils.ts","../../src/features/requestor/remoteSupport/types.ts","../../src/utils/logger.ts","../../src/features/requestor/remoteSupport/registeredRemoteSupportServices.ts","../../src/features/requestor/remoteSupport/zenDesk.ts","../../src/features/requestor/remoteSupport/registerDefaultRemoteSupport.ts","../../src/features/requestor/requestorSlice.ts","../../src/features/sower/sowerApi.ts","../../src/features/submission/authMappingUtils.ts","../../src/features/submission/submissionApi.ts","../../src/features/workspace/workspaceApi.ts","../../src/features/workspace/utils.ts","../../src/features/config/registry.ts"],"sourcesContent":["export const GEN3_COMMONS_NAME =\n process.env.NEXT_PUBLIC_GEN3_COMMONS_NAME || 'gen3';\nexport const GEN3_API = process.env.NEXT_PUBLIC_GEN3_API || '';\nexport const GEN3_DOMAIN = process.env.NEXT_PUBLIC_GEN3_DOMAIN || '';\nexport const GUID_PREFIX_PATTERN = /^dg.[a-zA-Z0-9]+\\//;\n\n/**\n * Service Specific Constants\n */\nexport const GEN3_GUPPY_API =\n process.env.NEXT_PUBLIC_GEN3_GUPPY_API || `${GEN3_API}/guppy`;\nexport const GEN3_MDS_API =\n process.env.NEXT_PUBLIC_GEN3_MDS_API || `${GEN3_API}/mds`;\nexport const GEN3_DOWNLOADS_ENDPOINT =\n process.env.NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT || 'downloads';\nexport const GEN3_FENCE_API =\n process.env.NEXT_PUBLIC_GEN3_FENCE_API || `${GEN3_API}/user`;\nexport const GEN3_FENCE_SERVICE =\n process.env.GEN3_FENCE_SERVICE || 'http://fence-service';\nexport const GEN3_AI_SEARCH_API =\n process.env.NEXT_PUBLIC_GEN3_AI_SEARCH_API || `${GEN3_API}/ai-search`;\nexport const GEN3_AUTHZ_API =\n process.env.NEXT_PUBLIC_GEN3_AUTHZ_API || `${GEN3_API}/authz`;\nexport const GEN3_AUTHZ_SERVICE =\n process.env.GEN3_AUTHZ_SERVICE || 'http://arborist-service';\nexport const GEN3_REDIRECT_URL =\n process.env.NEXT_PUBLIC_GEN3_REDIRECT_URL || GEN3_API;\nexport const GEN3_WORKSPACE_API =\n process.env.NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API ||\n `${GEN3_API}/lw-workspace`;\nexport const GEN3_SUBMISSION_API =\n process.env.NEXT_PUBLIC_GEN3_SUBMISSION_API ||\n `${GEN3_API}/api/v0/submission`;\nexport const GEN3_WTS_API =\n process.env.NEXT_PUBLIC_GEN3_WTS_API || `${GEN3_API}/wts`;\nexport const GEN3_DATA_LIBRARY_API =\n process.env.NEXT_PUBLIC_GEN3_DATA_LIBRARY_API || `${GEN3_API}/library/lists`;\nexport const GEN3_CROSSWALK_API =\n process.env.NEXT_PUBLIC_GEN3_CROSSWALK_API || `${GEN3_API}/mds`;\nexport const GEN3_SOWER_API =\n process.env.NEXT_PUBLIC_GEN3_SOWER_API || `${GEN3_API}/jobs`;\nexport const GEN3_MANIFEST_API =\n process.env.NEXT_PUBLIC_GEN3_MANIFEST_API || `${GEN3_API}/manifests`;\nexport const GEN3_REQUESTOR_API =\n process.env.NEXT_PUBLIC_GEN3_REQUESTOR_API || `${GEN3_API}/requestor`;\n\nexport enum Accessibility {\n ACCESSIBLE = 'accessible',\n UNACCESSIBLE = 'unaccessible',\n ALL = 'all',\n}\n\nexport const FILE_FORMATS = {\n JSON: 'json',\n TSV: 'tsv',\n CSV: 'csv',\n};\n\nexport const FILE_DELIMITERS = {\n tsv: '\\t',\n csv: ',',\n};\n\nexport const CART_LIMIT = 80000;\n","import { FetchError } from './types';\n\nexport const isFetchError = <T>(obj: unknown): obj is FetchError<T> => {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n\n const { url, status, statusText, text } = obj as Partial<FetchError<T>>;\n\n return (\n typeof url === 'string' &&\n typeof status === 'number' &&\n typeof statusText === 'string' &&\n typeof text === 'string'\n );\n};\n\n/**\n * Template for fence error response dict\n * @returns: An error dict response from a RESTFUL API request\n */\nexport const buildFetchError = async <T>(\n res: Response,\n request?: T,\n): Promise<FetchError<T>> => {\n return {\n url: res.url,\n status: res.status,\n statusText: res.statusText,\n text: await res.text(),\n request: request,\n };\n};\n","import { type FetchRequest, type Gen3FenceResponse } from './types';\nimport { GEN3_FENCE_API, GEN3_FENCE_SERVICE } from '../../constants';\nimport { buildFetchError } from './utils';\n\n/**\n * Performs an asynchronous HTTP request to the Gen3 Fence API and processes the response.\n *\n * @template T The expected type of the response data.\n * @param {FetchRequest} options The options for the fetch request.\n * @param {string} options.endpoint The API endpoint to which the request will be sent.\n * @param {Record<string, string>} options.headers An object representing the HTTP headers to include in the request.\n * @param {Record<string, any>} [options.body={}] The request body to send with the fetch, used if the HTTP method is POST.\n * @param {string} [options.method='GET'] The HTTP method for the request (e.g., 'GET', 'POST').\n * @param {boolean} [options.isJSON=true] Determines if the response should be parsed as JSON or returned as plain text.\n * @param useService { boolean } Uses fence_service instead of public fence API\n * @returns {Promise<Gen3FenceResponse<T>>} A promise that resolves to the parsed data and response status\n * or rejects with an error if the request fails.\n * @throws {Error} Throws an error if the fetch request fails or the response is not successful.\n */\nexport const fetchFence = async <T>(\n { endpoint, headers, body = {}, method = 'GET', isJSON = true }: FetchRequest,\n useService: boolean = false,\n): Promise<Gen3FenceResponse<T>> => {\n let url = `${GEN3_FENCE_API}${endpoint}`;\n if (useService) {\n url = `${GEN3_FENCE_SERVICE}/${endpoint}`;\n }\n\n const res = await fetch(url, {\n method: method,\n credentials: 'include',\n headers: {\n // Ensure Content-Type is set for JSON POSTs, but allow overrides via 'headers'\n ...(method === 'POST' ? { 'Content-Type': 'application/json' } : {}),\n ...headers,\n },\n body: 'POST' === method ? JSON.stringify(body) : null,\n // REMOVED: next: { revalidate: 360 } - Auth requests should not be cached by default\n });\n\n if (res.ok)\n return {\n data: isJSON ? await res.json() : await res.text(),\n status: res.status,\n };\n throw await buildFetchError(res, {\n endpoint,\n method,\n headers,\n body,\n });\n};\n","import { createSelector } from '@reduxjs/toolkit';\nimport { type Gen3FenceResponse } from '../fence/types';\nimport { Gen3User, LoginStatus } from './types';\nimport { CoreState } from '../../reducers';\nimport { getCookie } from 'cookies-next';\nimport { QueryStatus } from '@reduxjs/toolkit/query';\nimport { createApi } from '@reduxjs/toolkit/query/react';\nimport { GEN3_API } from '../../constants';\nimport { fetchFence } from '../fence/fetchFence';\n\nexport interface CSRFToken {\n readonly csrfToken: string;\n}\n\nexport interface UserAuthResponse {\n readonly data: Gen3User;\n readonly loginStatus: LoginStatus;\n}\n\nexport const userAuthApi = createApi({\n reducerPath: 'userAuthApi',\n refetchOnMountOrArgChange: 1800,\n refetchOnReconnect: true,\n baseQuery: async ({ endpoint }, { getState }) => {\n let results;\n const csrfToken = selectCSRFToken(getState() as CoreState);\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n accessToken = getCookie('credentials_token');\n }\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n credentials: 'include',\n };\n\n try {\n results = await fetchFence({ endpoint, headers });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_e: unknown) {\n /*\n Because an \"error\" response is valid for the auth requests we don't want to\n put the request in an error state, or it will attempt the request over and over again\n */\n return { data: {} };\n }\n\n return { data: results };\n },\n endpoints: (builder) => ({\n fetchUserDetails: builder.query<UserAuthResponse, void>({\n query: () => ({ endpoint: '/user' }),\n transformResponse(response: Gen3FenceResponse<Gen3User>) {\n return {\n data: response.data,\n // TODO: check if this is the correct status code\n\n loginStatus:\n response.status === 200 && response.data?.username\n ? 'authenticated'\n : 'unauthenticated',\n };\n },\n }),\n getCSRF: builder.query<CSRFToken, void>({\n queryFn: async () => {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n };\n try {\n const res = await fetch(`${GEN3_API}/_status`, {\n headers: headers,\n });\n\n if (res.ok) {\n const jsonData = await res.json();\n const token = jsonData?.csrf ?? '';\n return {\n data: { csrfToken: token },\n };\n }\n } catch (error: unknown) {\n if (error instanceof Error) {\n return {\n error: error.message,\n };\n } else {\n return {\n error: 'Unknown Error',\n };\n }\n }\n return {\n error: 'Unknown Error',\n };\n },\n }),\n }),\n});\n\nconst EMPTY_USER: Gen3User = {\n username: undefined,\n};\n\nexport const {\n useFetchUserDetailsQuery,\n useLazyFetchUserDetailsQuery,\n useGetCSRFQuery,\n useLazyGetCSRFQuery,\n} = userAuthApi;\nexport const userAuthApiMiddleware = userAuthApi.middleware;\nexport const userAuthApiReducerPath = userAuthApi.reducerPath;\nexport const userAuthApiReducer = userAuthApi.reducer;\n\nexport const selectUserDetailsFromState =\n userAuthApi.endpoints.fetchUserDetails.select();\n\nexport const selectUserDetails = createSelector(\n selectUserDetailsFromState,\n (userDetails) => userDetails?.data?.data ?? EMPTY_USER,\n);\n\nexport const selectUserAuthStatus = createSelector(\n selectUserDetailsFromState,\n (userLoginState) =>\n userLoginState.status === QueryStatus.pending\n ? ('pending' as LoginStatus)\n : userLoginState.status === QueryStatus.uninitialized\n ? ('not present' as LoginStatus)\n : (userLoginState?.data?.loginStatus ??\n ('unauthenticated' as LoginStatus)),\n);\n\nexport const selectCSRFTokenData = userAuthApi.endpoints.getCSRF.select();\n\nconst passThroughTheState = (state: CoreState) => state.userAuthApi;\n\nexport const selectCSRFToken = createSelector(\n [selectCSRFTokenData, passThroughTheState],\n (state) => state?.data?.csrfToken,\n);\n\nexport const selectHeadersWithCSRFToken = createSelector(\n [selectCSRFToken, passThroughTheState],\n (csrfToken) => ({\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'X-CSRF-Token': csrfToken }),\n }),\n);\n","import { Middleware, Reducer } from '@reduxjs/toolkit';\nimport { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';\nimport { GEN3_API } from '../../constants';\nimport { CoreState } from '../../reducers';\nimport { selectCSRFToken } from '../user/userSliceRTK';\nimport { getCookie } from 'cookies-next';\n\n/**\n * Creates a base class core API for building other API endpoints on top of.\n * @param reducerPath - The root key name that the other slices will be derived from\n * @param baseQuery: - The template query which the slices will addon to\n * @param endpoints - Base API endpoints that should exist in every slice\n * @returns: The generated base API\n */\nexport const gen3Api = createApi({\n reducerPath: 'gen3Services',\n baseQuery: fetchBaseQuery({\n baseUrl: `${GEN3_API}`,\n prepareHeaders: (headers, { getState }) => {\n const csrfToken = selectCSRFToken(getState() as CoreState);\n headers.set('Content-Type', 'application/json');\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n const accessToken = getCookie('credentials_token');\n if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);\n }\n if (csrfToken) headers.set('X-CSRF-Token', csrfToken);\n\n return headers;\n },\n validateStatus: (response) => {\n return response.status >= 200 && response.status < 300;\n },\n }),\n endpoints: () => ({}),\n});\n\nexport const gen3ServicesReducer: Reducer = gen3Api.reducer as Reducer;\nexport const gen3ServicesReducerMiddleware = gen3Api.middleware as Middleware;\n","import { useDispatch, useSelector } from 'react-redux';\nimport { CoreDispatch } from './store';\nimport { CoreState } from './reducers';\n\n// From here down is react-related code. If we wanted to create a UI-agnotic core,\n// we could need to move the following code and the provider into a new workspace,\n// such as core-react.\n\n/**\n * The initial context is never used in practice. A little casting voodoo to satisfy TS.\n *\n * Note: Should the action type be AnyAction (from redux) or PayloadAction (from redux-toolkit)?\n * If we are creating all of our actions through RTK, then PayloadAction might be the\n * correct opinionated type.\n */\n\nexport const useCoreSelector = useSelector.withTypes<CoreState>();\nexport const useCoreDispatch = useDispatch.withTypes<CoreDispatch>();\n","import { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport { fetchFence } from '../fence/fetchFence';\nimport { type Gen3FenceResponse } from '../fence/types';\nimport { CoreDispatch } from '../../store';\nimport { CoreState } from '../../reducers';\nimport { CoreDataSelectorResponse, DataStatus } from '../../dataAccess';\nimport { useCoreDispatch, useCoreSelector } from '../../hooks';\nimport { useEffect } from 'react';\nimport { Gen3User, LoginStatus } from './types';\nimport { getCookie } from 'cookies-next';\nimport { selectCSRFToken } from './userSliceRTK';\n\nexport interface Gen3UserLoginResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly loginStatus: LoginStatus;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\n/**\n * Creates an async thunk for fetching user permissions details from fence\n * @see https://redux-toolkit.js.org/api/createAsyncThunk\n * @returns: A fence response dict containing user details\n */\nexport const fetchUserState = createAsyncThunk<\n Gen3FenceResponse<Gen3User> | undefined,\n void,\n { dispatch: CoreDispatch; state: CoreState }\n>('fence/user/user', async (_, meta) => {\n // Get an access token from a cookie if in development mode\n const csrfToken = selectCSRFToken(meta.getState());\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n accessToken = getCookie('credentials_token');\n }\n\n return await fetchFence({\n endpoint: '/user',\n method: 'GET',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken ? { 'X-CSRF-Token': csrfToken } : {}),\n credentials: 'include',\n ...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),\n },\n });\n});\n\nexport const isAuthenticated = (loginStatus: LoginStatus): boolean =>\n loginStatus === 'authenticated';\n\nexport const isPending = (loginStatus: LoginStatus): boolean =>\n loginStatus === 'pending';\n\nexport interface Gen3UserState {\n readonly data?: Gen3User;\n readonly status: DataStatus;\n readonly loginStatus: LoginStatus;\n readonly error?: string;\n}\n\nconst initialState: Gen3UserState = {\n status: 'uninitialized',\n loginStatus: 'unauthenticated',\n error: undefined,\n};\n\n/**\n * Wraps a slice on top of fetchUserState async thunk to keep track of\n * query state. authenticated/not-authenticated vs. ejected/fulfilled/pending\n * @returns: status messages wrapped around fetchUserState response dict\n */\nconst slice = createSlice({\n name: 'fence/user',\n initialState,\n reducers: {\n resetUserState: () => initialState,\n },\n extraReducers: (builder) => {\n builder\n .addCase(fetchUserState.fulfilled, (_, action) => {\n const response = action.payload;\n if (response?.status !== 200) {\n return {\n status: 'rejected',\n loginStatus: 'unauthenticated',\n };\n }\n\n return {\n data: { ...response.data },\n status: 'fulfilled',\n loginStatus: 'authenticated',\n };\n })\n .addCase(fetchUserState.pending, () => {\n return { status: 'pending', loginStatus: 'unauthenticated' };\n })\n .addCase(fetchUserState.rejected, () => {\n return { status: 'rejected', loginStatus: 'unauthenticated' };\n });\n },\n});\n\nexport const userReducer = slice.reducer;\n\nexport const { resetUserState } = slice.actions;\n\nexport interface Gen3UserSelectorResponse<\n T,\n> extends CoreDataSelectorResponse<T> {\n readonly loginStatus: LoginStatus;\n}\n\nexport const selectUserData = (\n state: CoreState,\n): Gen3UserSelectorResponse<Gen3User> => {\n return state.user;\n};\n\nexport const selectUser = (state: CoreState): Gen3UserState => state.user;\n\nexport const selectUserLoginStatus = (state: CoreState): LoginStatus =>\n state.user.loginStatus;\n\nexport const useIsUserLoggedIn = (): boolean => {\n return useCoreSelector((state) =>\n isAuthenticated(selectUserLoginStatus(state)),\n );\n};\n\n/**\n * Hook to return get the authenticated state of the user and if logged in,\n * the user's profile and access api.\n * Note that if fetchUserState gets called, the user's session is renewed.\n */\nexport const useUserAuth = (renew = false): Gen3UserLoginResponse<Gen3User> => {\n const coreDispatch = useCoreDispatch();\n const { data, status, loginStatus, error } = useCoreSelector(selectUserData);\n\n useEffect(() => {\n if (status === 'uninitialized' || renew) {\n // TODO: need to determine what other states require dispatch\n coreDispatch(fetchUserState());\n }\n }, [status, coreDispatch, renew]);\n\n return {\n data: data,\n error,\n loginStatus,\n isUninitialized: status === 'uninitialized',\n isFetching: status === 'pending',\n isSuccess: status === 'fulfilled',\n isError: status === 'rejected',\n };\n};\n","/**\n * A registry for the Gen3 Apps.\n */\nexport const REGISTRY: Record<string, React.ReactNode> = {};\n\nexport const registerGen3App = (id: string, gen3App: React.ReactNode): void => {\n REGISTRY[id] = gen3App;\n};\n\nexport const lookupGen3App = (id: string): React.ReactNode => {\n if (id in REGISTRY) return REGISTRY[id];\n else return null;\n};\n\nexport const computeGen3AppId = (name: string, version: string): string => {\n return `${name}@${version}`;\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport React from 'react';\nimport { CoreState } from '../../reducers';\nimport { lookupGen3App } from './gen3AppRegistry';\n\nexport interface Gen3AppsState {\n readonly gen3Apps: Readonly<Record<string, Gen3AppMetadata>>;\n readonly currentAppId?: string;\n}\n\nexport interface Gen3AppMetadata {\n readonly id: string;\n readonly name: string;\n readonly version: string;\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n}\n\nexport type EntityType = 'case' | 'gene' | 'ssm' | 'cnv' | 'file';\n\nconst initialState: Gen3AppsState = {\n gen3Apps: {},\n};\n\nconst slice = createSlice({\n name: 'gen3Apps',\n initialState,\n reducers: {\n addGen3AppMetadata: (state, action: PayloadAction<Gen3AppMetadata>) => {\n const { name, requiredEntityTypes } = action.payload;\n\n state.gen3Apps[name] = {\n ...action.payload,\n // need to turn a ReadonlyArray into a mutable array for immer's WritableDraft\n requiredEntityTypes: [...requiredEntityTypes],\n };\n },\n },\n});\n\nexport const gen3AppReducer = slice.reducer;\n\nexport const { addGen3AppMetadata } = slice.actions;\n\nexport const selectGen3AppIds = (state: CoreState): ReadonlyArray<string> =>\n Object.keys(state.gen3Apps.gen3Apps);\n\nexport const selectAllGen3AppMetadata = (\n state: CoreState,\n): ReadonlyArray<Gen3AppMetadata> => Object.values(state.gen3Apps.gen3Apps);\n\nexport const selectGen3AppMetadataByName = (\n state: CoreState,\n appName: string,\n): Gen3AppMetadata => state.gen3Apps.gen3Apps[appName];\n\nexport const selectGen3AppByName = (appName: string): React.ReactNode =>\n lookupGen3App(appName); // TODO: memoize this selector\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\n\nexport type DRSHostnameMap = Record<string, string>;\n\nconst initialState : Record<string, string> = {};\n\n// TODO: document what this does\nconst slice = createSlice({\n name: 'drsResolver',\n initialState,\n reducers: {\n setDRSHostnames: (_state, action: PayloadAction<DRSHostnameMap>) => {\n return action.payload;\n },\n },\n});\n\nexport const drsHostnamesReducer = slice.reducer;\n\nexport const { setDRSHostnames } = slice.actions;\n\nexport const drsHostnamesSelector = (id:string, state: CoreState) =>\n state.drsHostnames?.[id];\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\n\n/**\n * Defines the modals slice of the Redux store.\n * This slice is used to control the display of standard Gen3 modals.\n * and can be extended to add custom modals by representing them as strings.\n */\nexport enum Modals {\n 'FirstTimeModal' = 'FirstTimeModal',\n 'SessionExpireModal' = 'SessionExpireModal',\n 'NoAccessModal' = 'NoAccessModal',\n 'CreateCredentialsAPIKeyModal' = 'CreateCredentialsAPIKeyModal',\n 'GeneralErrorModal' = 'GeneralErrorModal',\n}\n\n// Type for the current modal in the store\n// This can be a standard Gen3 modal, a custom modal (via string), or null\ntype CurrentModal = Modals | string | null;\n\nexport interface ModalState {\n currentModal: CurrentModal;\n message?: string;\n}\n\nconst initialState: ModalState = {\n currentModal: null,\n};\n\n//Creates a modal slice for tracking showModal and hideModal state.\nconst slice = createSlice({\n name: 'modals',\n initialState,\n reducers: {\n showModal: (\n state: ModalState,\n action: PayloadAction<{ modal: Modals; message?: string }>,\n ) => {\n state.currentModal = action.payload.modal;\n state.message = action.payload.message;\n return state;\n },\n hideModal: (state: ModalState) => {\n state.currentModal = null;\n return state;\n },\n },\n});\n\nexport const modalReducer = slice.reducer;\nexport const { showModal, hideModal } = slice.actions;\n\nexport const selectCurrentModal = (state: CoreState): CurrentModal =>\n state.modals.currentModal;\n\nexport const selectCurrentMessage = (state: CoreState): string | undefined =>\n state.modals.message;\n","export interface PayModel {\n bmh_workspace_id: string;\n workspace_type: string;\n user_id: string;\n account_id: string;\n request_status: string;\n local: boolean;\n region: string;\n ecs: boolean;\n subnet: number;\n 'hard-limit': number;\n 'soft-limit': number;\n 'total-usage': number;\n current_pay_model: boolean;\n}\n\nexport interface WorkspaceId {\n id: string;\n}\n\nexport interface WorkspaceInfo extends WorkspaceId {\n name: string;\n idleTimeLimit: number;\n memoryLimit: string;\n cpuLimit: string;\n}\n\nexport interface WorkspaceInfoResponse {\n id: string;\n name: string;\n 'idle-time-limit': number;\n 'memory-limit': string;\n 'cpu-limit': string;\n}\n\nexport type WorkspaceOptionsResponse = Array<WorkspaceInfoResponse>;\nexport type WorkspaceOptions = Array<WorkspaceInfo>;\n\nexport interface WorkspacePayModelResponse {\n currentPayModel: PayModel;\n allPayModels: PayModel[];\n noPayModel: boolean;\n}\n\n/**\n * Workspace Pod status\n */\nexport enum WorkspaceStatus {\n Launching = 'Launching',\n Running = 'Running',\n Terminating = 'Terminating',\n Stopped = 'Stopped',\n NotFound = 'Not Found',\n Errored = 'Errored',\n StatusError = 'Status Error',\n}\n\n/**\n * requested state of pod, either by user or workspace monitor\n */\nexport enum RequestedWorkspaceStatus {\n Launch = 'Launch',\n Terminate = 'Terminate',\n Unset = 'Unset', // same\n}\n\nexport enum PodConditionType {\n PodScheduled = 'PodScheduled',\n Initialized = 'Initialized',\n ContainersReady = 'ContainersReady',\n PodReadyToStartContainers = 'PodReadyToStartContainers',\n ProxyConnected = 'ProxyConnected',\n Ready = 'Ready',\n}\n\nexport enum PodStatus {\n True = 'True',\n False = 'False',\n Unknown = 'Unknown',\n}\n\nexport interface WorkspaceContainerState {\n name: string;\n ready: boolean;\n state:\n | { running: { startedAt: string } }\n | { waiting: { reason: string } }\n | { terminated: { reason: string } };\n}\n\nexport interface WorkspacePodCondition {\n type: PodConditionType;\n status: PodStatus;\n}\n\nexport interface WorkspaceStatusResponse {\n status: WorkspaceStatus;\n conditions?: Array<WorkspacePodCondition>;\n containerStates?: Array<WorkspaceContainerState>;\n idleTimeLimit?: number;\n lastActivityTime: number;\n workspaceType?: string;\n}\n","// Using the built-in Date object\nexport const getCurrentTimestamp = (): number => {\n return Date.now(); // Returns milliseconds since Unix epoch\n};\n\n// Get a readable timestamp for logging/display\nexport const getFormattedTimestamp = (): string => {\n return new Date().toISOString();\n};\n\n// Compare two timestamps and get difference in milliseconds\nexport const getTimeDifferenceMs = (\n startTime: number,\n endTime: number = Date.now(),\n): number => {\n return endTime - startTime;\n};\n\n// Check if time difference is greater than specified minutes\nexport const isTimeGreaterThan = (\n startTime: number,\n minutes: number,\n): boolean => {\n const diffMs = getTimeDifferenceMs(startTime);\n const diffMinutes = diffMs / (1000 * 60);\n return diffMinutes > minutes;\n};\n\n// Get human-readable duration\nexport const getReadableDuration = (milliseconds: number): string => {\n const seconds = Math.floor(milliseconds / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n\n if (hours > 0) {\n return `${hours}h ${minutes % 60}m ${seconds % 60}s`;\n }\n if (minutes > 0) {\n return `${minutes}m ${seconds % 60}s`;\n }\n return `${seconds}s`;\n};\n\n// Example usage:\nexport const measureExecutionTime = async (func: () => Promise<any>) => {\n const startTime = getCurrentTimestamp();\n await func();\n const duration = getTimeDifferenceMs(startTime);\n return getReadableDuration(duration);\n};\n\n// Performance monitoring with high-resolution timestamps\nexport const getHighResolutionTimestamp = (): number => {\n return performance.now(); // More precise than Date.now() for performance measurements\n};\nexport const getTimestamp = () => {\n return new Date(Date.now()).toLocaleString();\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { CoreState } from '../../reducers';\nimport {\n RequestedWorkspaceStatus,\n type WorkspaceId,\n WorkspaceStatus,\n} from './types';\nimport { getCurrentTimestamp } from '../../utils/time';\n\nexport const NO_WORKSPACE_ID = 'none';\n\n// the requested state for a workspace\nexport interface WorkspaceState {\n id: string;\n status: WorkspaceStatus; // current status of the workspace\n requestedStatus: RequestedWorkspaceStatus; // the goal state for the workspace\n requestedStatusTimestamp: number;\n}\n\nconst initialState: WorkspaceState = {\n id: NO_WORKSPACE_ID,\n status: WorkspaceStatus.NotFound,\n requestedStatus: RequestedWorkspaceStatus.Unset,\n requestedStatusTimestamp: getCurrentTimestamp(),\n};\n\nconst slice = createSlice({\n name: 'ActiveWorkspace',\n initialState,\n reducers: {\n setActiveWorkspaceId: (state, action: PayloadAction<WorkspaceId>) => {\n state = { ...state, id: action.payload.id };\n return state;\n },\n clearActiveWorkspaceId: (state) => {\n return { ...state, id: NO_WORKSPACE_ID };\n },\n setActiveWorkspaceStatus: (\n state,\n action: PayloadAction<WorkspaceStatus>,\n ) => {\n return { ...state, status: action.payload };\n },\n setRequestedWorkspaceStatus: (\n state,\n action: PayloadAction<RequestedWorkspaceStatus>,\n ) => {\n return {\n ...state,\n requestedStatus: action.payload,\n requestedStatusTimestamp: getCurrentTimestamp(),\n };\n },\n setActiveWorkspace: (_state, action: PayloadAction<WorkspaceState>) => {\n return { ...action.payload };\n },\n },\n});\n\nexport const activeWorkspaceReducer = slice.reducer;\nexport const {\n setActiveWorkspaceId,\n clearActiveWorkspaceId,\n setActiveWorkspaceStatus,\n setRequestedWorkspaceStatus,\n setActiveWorkspace,\n} = slice.actions;\n\nexport const selectActiveWorkspaceId = (state: CoreState): string =>\n state.activeWorkspace.id;\n\nexport const selectActiveWorkspaceStatus = (\n state: CoreState,\n): WorkspaceStatus => state.activeWorkspace.status;\n\nexport const selectRequestedWorkspaceStatus = (\n state: CoreState,\n): RequestedWorkspaceStatus => state.activeWorkspace.requestedStatus;\n\nexport const selectRequestedWorkspaceStatusTimestamp = (\n state: CoreState,\n): number => state.activeWorkspace.requestedStatusTimestamp;\n","import { createEntityAdapter, createSlice } from '@reduxjs/toolkit';\n\nexport type CartItemId = string;\nexport interface CartItem extends Record<string, any> {\n id: CartItemId;\n}\n\nexport const cartAdapter = createEntityAdapter<CartItem, CartItemId>({\n selectId: (item) => item.id,\n});\n\nconst initialState = cartAdapter.getInitialState({});\n\nexport const cartSlice = createSlice({\n name: 'cart',\n initialState: initialState,\n reducers: {\n addItemsToCart: cartAdapter.addMany,\n removeItemsFromCart: cartAdapter.removeMany,\n },\n});\n\nexport const cartReducer = cartSlice.reducer;\nexport const { addItemsToCart, removeItemsFromCart } = cartSlice.actions;\n","import { cartAdapter } from './cartSlice';\nimport type { CoreState } from '../../reducers';\n\nexport const {\n selectById: selectCartItem,\n selectIds: selectCartItems,\n selectAll: selectCart,\n selectTotal: selectCartCount,\n} = cartAdapter.getSelectors((state: CoreState) => state.cart);\n","import {\n addItemsToCart,\n type CartItem,\n cartReducer,\n removeItemsFromCart,\n} from './cartSlice';\n\nimport {\n selectCart,\n selectCartCount,\n selectCartItem,\n selectCartItems,\n} from './cartSelectors';\n\nexport {\n selectCart,\n addItemsToCart,\n removeItemsFromCart,\n type CartItem,\n cartReducer,\n selectCartCount,\n selectCartItem,\n selectCartItems,\n};\n\nexport const cartReducerPath = 'cart';\n","import { gen3Api } from '../gen3';\nimport { ExternalProvider } from './types';\nimport { GEN3_WTS_API } from '../../constants';\n\nexport interface ExternalProviderResponse {\n providers: ExternalProvider[];\n}\n\n/**\n * @description Creates a externalLoginApi for listing the configured identity providers\n * in workspace token service. Includes user token expiration time.\n * @see https://github.com/uc-cdis/workspace-token-service/tree/master\n */\nexport const externalLoginApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getExternalLogins: builder.query<ExternalProviderResponse, void>({\n query: () => ({\n url: `${GEN3_WTS_API}/external_oidc/`,\n }),\n }),\n isExternalConnected: builder.query<boolean, string>({\n query: (idp: string) => ({\n url: `${GEN3_WTS_API}/oauth2/connected?idp=${idp}`,\n }),\n transformResponse: () => {\n return true; // if success then connected is true\n },\n }),\n }),\n});\n\nexport const {\n useGetExternalLoginsQuery,\n useLazyGetExternalLoginsQuery,\n useLazyIsExternalConnectedQuery,\n useIsExternalConnectedQuery,\n} = externalLoginApi;\n","/**\n * Custom error class for resolving DRS object ID errors\n */\nclass ResolveDRSError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ResolveDRSError';\n }\n}\n\n/**\n * Resolves DRS object ID from a list of guids using dataguids.org\n * Use of this function should be limited\n * @param guidsForHostnameResolution\n */\nexport const resolveDRSWithDataGUISOrg = async (\n guidsForHostnameResolution: string[],\n): Promise<Record<string, string>> => {\n const INVALID_INPUT_ERROR =\n 'Invalid input: guidsForHostnameResolution must be an array of strings';\n const RESOLVE_DRS_ERROR = 'Failed to resolve DRS object ID';\n\n if (\n !Array.isArray(guidsForHostnameResolution) ||\n !guidsForHostnameResolution.every(\n (guid: unknown) => typeof guid === 'string',\n )\n ) {\n throw new Error(INVALID_INPUT_ERROR);\n }\n\n try {\n const responses = await Promise.allSettled(\n guidsForHostnameResolution.map(async (guid) => {\n try {\n const response = await fetch(`https://dataguids.org/index/${guid}`);\n if (response.status === 200) {\n try {\n return await response.json();\n } catch (error) {\n throw new ResolveDRSError('Failed to parse response as JSON');\n }\n } else {\n throw new ResolveDRSError(RESOLVE_DRS_ERROR);\n }\n } catch (error) {\n throw new ResolveDRSError(RESOLVE_DRS_ERROR);\n }\n }),\n );\n\n return responses.reduce((acc, response, index) => {\n if (response.status === 'fulfilled' && response.value.data) {\n return {\n ...acc,\n [guidsForHostnameResolution[index]]: response.value.data,\n };\n } else {\n throw new ResolveDRSError(RESOLVE_DRS_ERROR);\n }\n }, {} as Record<string, string>);\n } catch (error) {\n throw new ResolveDRSError(RESOLVE_DRS_ERROR);\n }\n};\n","import { drsHostnamesSelector } from '../drsHostnameSlice';\nimport { coreStore } from '../../../store';\n\nexport const resolveCachedDRS = async (\n guidsForHostnameResolution: string[],\n) : Promise<Record<string, string>> => {\n const state = coreStore.getState();\n const resolvedIds : Record<string, string> = { };\n for (const guid of guidsForHostnameResolution) {\n const hostname = drsHostnamesSelector(guid, state);\n if (hostname) {\n resolvedIds[guid] = hostname;\n }\n }\n return resolvedIds;\n};\n","import { resolveDRSWithDataGUISOrg } from './resolvers/dataGUIDSDotOrg';\nimport { resolveCachedDRS } from './resolvers/cachedDRSResolver';\n\nenum DRSResolverType {\n dataGUISOrg = 'dataGUISOrg',\n cached = 'cached',\n}\n\ntype DRSResolverCatalog = {\n [key in DRSResolverType]: (\n guidsForHostnameResolution: string[],\n ) => Promise<Awaited<Record<string, string>>>;\n};\n\nconst DRS_Resolvers: DRSResolverCatalog = {\n dataGUISOrg: resolveDRSWithDataGUISOrg,\n cached: resolveCachedDRS,\n};\n\n// TODO - add to config file for DRS resolver\nexport const resolveDRSObjectId = (\n guidsForHostnameResolution: string[],\n resolver: DRSResolverType = DRSResolverType.cached,\n) => {\n return DRS_Resolvers[resolver](guidsForHostnameResolution);\n};\n","export const isNotDefined = (x: unknown): x is undefined => {\n return x === undefined || x === null || x === void 0;\n};\n\nexport const isObject = (x: unknown): x is Record<string, unknown> => {\n return typeof x === 'object';\n};\n\nexport const isArray = (x: unknown): x is ReadonlyArray<unknown> => {\n return Array.isArray(x);\n};\n\nexport const isString = (x: unknown): x is string => {\n return typeof x === 'string';\n};\n","/**\n * Prepares a URL for downloading by appending '/download' to the provided apiUrl.\n *\n * @param {string} apiUrl - The base URL to be used for preparing the download URL.\n * @returns {URL} - The prepared download URL as a URL object.\n */\nexport const prepareUrl = (apiUrl: string) => new URL(apiUrl + '/download');\n","import { selectCSRFToken } from '../features/user';\nimport { coreStore } from '../store';\nimport { GEN3_API, GEN3_FENCE_API } from '../constants';\nimport { getCookie } from 'cookies-next';\n\nexport enum HttpMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n DELETE = 'DELETE',\n}\n\nconst DEFAULT_METHOD = HttpMethod.GET;\nconst CONTENT_TYPE_HEADER = 'Content-Type';\nconst CONTENT_TYPE_JSON = 'application/json';\n\nexport const HTTPErrorMessages: Record<number, string> = {\n // 4xx Client Errors\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 402: 'Payment Required',\n 403: 'Forbidden',\n 404: 'Not Found',\n 405: 'Method Not Allowed',\n 406: 'Not Acceptable',\n 407: 'Proxy Authentication Required',\n 408: 'Request Timeout',\n 409: 'Conflict',\n 410: 'Gone',\n 411: 'Length Required',\n 412: 'Precondition Failed',\n 413: 'Payload Too Large',\n 414: 'URI Too Long',\n 415: 'Unsupported Media Type',\n 416: 'Range Not Satisfiable',\n 417: 'Expectation Failed',\n 418: \"I'm a teapot\",\n 421: 'Misdirected Request',\n 422: 'Unprocessable Entity',\n 423: 'Locked',\n 424: 'Failed Dependency',\n 425: 'Too Early',\n 426: 'Upgrade Required',\n 428: 'Precondition Required',\n 429: 'Too Many Requests',\n 431: 'Request Header Fields Too Large',\n 451: 'Unavailable For Legal Reasons',\n\n // 5xx Server Errors\n 500: 'Internal Server Error',\n 501: 'Not Implemented',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n 504: 'Gateway Timeout',\n 505: 'HTTP Version Not Supported',\n 506: 'Variant Also Negotiates',\n 507: 'Insufficient Storage',\n 508: 'Loop Detected',\n 510: 'Not Extended',\n 511: 'Network Authentication Required',\n};\n\n/**\n * Represents an error that occurs during an HTTP request.\n * Extends the built-in `Error` class to provide additional information\n * about the HTTP status code and optional response data.\n */\nexport class HTTPError extends Error {\n constructor(\n public status: number,\n message: string,\n public responseData?: any,\n ) {\n super(message);\n this.name = 'HTTPError';\n }\n}\n\ninterface FetchFencePresignedURLParameters {\n guid: string;\n method?: 'GET' | 'POST';\n onStart?: () => void; // function to call when the download starts\n onDone?: (blob: Blob) => void; // function to call when the download is done\n onError?: (error: Error | HTTPError) => void; // function to call when the download fails\n onAbort?: () => void; // function to call when the download is aborted\n signal?: AbortSignal; // AbortSignal to use for the request\n}\n\nexport const fetchFencePresignedURL = async ({\n guid,\n method = 'GET',\n onAbort = () => null,\n signal = undefined,\n}: FetchFencePresignedURLParameters) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n\n const headers = new Headers();\n headers.set('Content-Type', 'application/json');\n\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n const accessToken = getCookie('credentials_token');\n if (accessToken) {\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n }\n if (csrfToken) headers.set('X-CSRF-Token', csrfToken);\n\n const url = `${GEN3_FENCE_API}/data/download/${guid}`;\n try {\n const response = await fetch(url, {\n method: method,\n headers: headers,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit);\n\n // Check if the response is ok before proceeding\n if (!response.ok) {\n let errorMessage: string;\n let errorData: any;\n\n try {\n // Attempt to parse error response as JSON\n errorData = await response.json();\n errorMessage = errorData.message || response.statusText;\n } catch {\n // If JSON parsing fails, use status text\n errorMessage = response.statusText;\n }\n throw new HTTPError(response.status, errorMessage, errorData);\n }\n return (await response.json())['url'];\n } catch (error: unknown) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n onAbort?.();\n }\n }\n throw error;\n }\n};\n\n/**\n * Retrieves a CSRF token from the server.\n *\n * This asynchronous function sends a GET request to the server's status endpoint\n * to fetch the CSRF token in the response. The token is expected to be included\n * in the JSON response under the `csrf_token` field.\n *\n * @returns {Promise<string | null>} A promise that resolves to the CSRF token as a string if successfully retrieved,\n * or null if the token is not present in the response.\n * @throws {HTTPError} Throws an HTTPError if the server response is not successful.\n */\nconst getCSRFToken = async (): Promise<string | null> => {\n const requestHeaders = new Headers({\n [CONTENT_TYPE_HEADER]: CONTENT_TYPE_JSON,\n });\n const response = await fetch(`${GEN3_API}/_status`, {\n headers: requestHeaders,\n });\n\n if (!response.ok) {\n throw new HTTPError(response.status, response.statusText);\n }\n\n const { csrf: csrfToken } = await response.json();\n return csrfToken || null;\n};\n\n/**\n * Fetches JSON data from a specified URL using the Fetch API.\n *\n * @param {string} url - The URL to fetch the JSON data from.\n * @param {boolean} [requiresCSRF=false] - Indicates whether a CSRF token is required for the request.\n * If true, the CSRF token will be added to the request headers.\n * @param {string} [method=DEFAULT_METHOD] - The HTTP method to use for the request (e.g., 'GET', 'POST').\n * @param {unknown} [body=undefined] - The request body to send, applicable when using methods like 'POST'.\n *\n * @param signal - Abort fetch\n * @returns {Promise<T>} A promise that resolves to the parsed JSON data from the response.\n *\n * @throws {HTTPError} Throws an error if the HTTP response status indicates a failure.\n */\nexport const fetchJSONDataFromURL = async <T = unknown>(\n url: string,\n requiresCSRF: boolean = false,\n method: HttpMethod = DEFAULT_METHOD,\n body: unknown = undefined,\n signal?: AbortSignal,\n): Promise<T | null> => {\n const requestHeaders = new Headers({\n [CONTENT_TYPE_HEADER]: CONTENT_TYPE_JSON,\n });\n\n if (requiresCSRF) {\n const csrfToken = await getCSRFToken();\n if (csrfToken) {\n requestHeaders.set('X-CSRF-Token', csrfToken);\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n const accessToken = getCookie('credentials_token');\n if (accessToken) {\n requestHeaders.set('Authorization', `Bearer ${accessToken}`);\n }\n }\n\n const response = await fetch(url, {\n method,\n headers: requestHeaders,\n body: ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())\n ? body\n : undefined,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit);\n\n if (!response.ok) {\n const errorBody = await response.json();\n throw new HTTPError(response.status, response.statusText, errorBody);\n }\n\n if (response.status === 204) {\n // no content so returns null\n return null;\n }\n return await response.json();\n};\n","import { JSONPath } from 'jsonpath-plus';\nimport { JSONObject, JSONValue } from '../types';\n\ntype JsonPathMapping = { [key: string]: string };\n\nexport const extractValuesFromObject = (\n jsonPathMappings: JsonPathMapping,\n obj: JSONObject,\n): JSONObject => {\n const result: { [key: string]: any } = {};\n\n const extractObjectValue = (\n jsonPath: string,\n obj: JSONObject,\n ): JSONValue | undefined => {\n const extractedValues = JSONPath({ path: jsonPath, json: obj });\n return extractedValues.length > 0 ? extractedValues[0] : undefined;\n };\n\n for (const key in jsonPathMappings) {\n if (key in Object.keys(jsonPathMappings)) {\n // Extract value from an object and store it in the result.\n result[key] = extractObjectValue(jsonPathMappings[key], obj);\n }\n }\n\n return result;\n};\n\nexport const ExtractValueFromObject = <T = any>(\n obj: Record<string, T> | null | undefined,\n key: string,\n valueIfNotFound: T,\n): T => {\n return obj?.[key] ?? valueIfNotFound;\n};\n","import { HistogramData, HistogramDataAsStringKey } from '../types';\n\nexport const DAYS_IN_YEAR = 365.25;\n\n/**\n * Converts HistogramData to HistogramDataAsStringKey by ensuring the key is a string.\n * If the key is already a string, it's used as is.\n * If the key is a number tuple [min, max], it's converted to a string in the format \"min-max\".\n *\n * @param data The HistogramData object to convert\n * @returns HistogramDataAsStringKey with the converted key\n */\nexport const convertToHistogramDataAsStringKey = (\n data: HistogramData,\n): HistogramDataAsStringKey => {\n return {\n key:\n typeof data.key === 'string' ? data.key : `${data.key[0]}-${data.key[1]}`,\n count: data.count,\n };\n};\n\nexport const calculatePercentageAsNumber = (\n count: number,\n total: number,\n): number => (count ? (count / total) * 100 : 0);\n\nexport const calculatePercentageAsString = (\n count: number,\n total: number,\n): string => `${((count / total) * 100).toFixed(2)}%`;\n\nexport const capitalize = (original: string): string => {\n const customCapitalizations: Record<string, string> = {\n id: 'ID',\n uuid: 'UUID',\n dna: 'DNA',\n dbsnp: 'dbSNP',\n cosmic: 'COSMIC',\n civic: 'CIViC',\n dbgap: 'dbGaP',\n ecog: 'ECOG',\n bmi: 'BMI',\n gdc: 'GDC',\n cnv: 'CNV',\n ssm: 'SSM',\n aa: 'AA',\n };\n\n return original\n .split(' ')\n .map(\n (word) =>\n customCapitalizations[word.toLowerCase()] ||\n `${word.charAt(0).toUpperCase()}${word.slice(1)}`,\n )\n .join(' ');\n};\n\ninterface HumanifyParams {\n term: string;\n capitalize?: boolean;\n facetTerm?: boolean;\n}\nexport const humanify = ({\n term = '',\n capitalize: cap = true,\n facetTerm = false,\n}: HumanifyParams): string => {\n let original;\n let humanified;\n if (facetTerm) {\n // Splits on capital letters followed by lowercase letters to find\n // words squished together in a string.\n original = term?.split(/(?=[A-Z][a-z])/).join(' ');\n humanified = term?.replace(/\\./g, ' ').replace(/_/g, ' ').trim();\n } else {\n const split = (original || term)?.split('.');\n humanified = split[split.length - 1]?.replace(/_/g, ' ').trim();\n\n // Special case 'name' to include any parent nested for sake of\n // specificity in the UI\n if (humanified === 'name' && split?.length > 1) {\n humanified = `${split[split?.length - 2]} ${humanified}`;\n }\n }\n return cap ? capitalize(humanified) : humanified;\n};\n\n/*https://github.com/NCI-GDC/portal-ui/blob/develop/src/packages/%40ncigdc/utils/ageDisplay.js*/\n/**\n * Converts age in days into a human-readable format.\n *\n * @param ageInDays - The age in days.\n * @param yearsOnly - If true, only display years.\n * @defaultValue false\n * @param defaultValue - The default value to return if ageInDays is falsy.\n * @defaultValue \"--\"\n * @returns The formatted age string.\n */\nexport const ageDisplay = (\n ageInDays: number,\n yearsOnly: boolean = false,\n defaultValue: string = '--',\n): string => {\n if (ageInDays !== 0 && !ageInDays) {\n return defaultValue;\n }\n const calculateYearsAndDays = (\n years: number,\n days: number,\n ): [number, number] => (days === 365 ? [years + 1, 0] : [years, days]);\n\n const ABS_AGE_DAYS = Math.abs(ageInDays);\n\n const [years, remainingDays] = calculateYearsAndDays(\n Math.floor(ABS_AGE_DAYS / DAYS_IN_YEAR),\n Math.ceil(ABS_AGE_DAYS % DAYS_IN_YEAR),\n );\n\n const formattedYears =\n years === 0 ? '' : `${years} ${years === 1 ? 'year' : 'years'}`;\n\n const formattedDays =\n !yearsOnly && remainingDays > 0\n ? `${remainingDays} ${remainingDays === 1 ? 'day' : 'days'}`\n : years === 0 && remainingDays === 0\n ? '0 days'\n : '';\n\n const ageString = [formattedYears, formattedDays].filter(Boolean).join(' ');\n\n return ageInDays >= 0 ? ageString : `-${ageString}`;\n};\n\n/**\n * Given an object of JSON, stringify it into a string.\n * @param obj - the object to stringify\n * @param defaults - the default value to return if the object is undefined\n * @category Utility\n */\n\nexport const stringifyJSONParam = (\n obj?: Record<string, any>,\n defaults = '{}',\n): string => (obj ? JSON.stringify(obj) : defaults);\n","import { coreStore } from '../../store';\nimport { userAuthApi } from './userSliceRTK';\nimport { fetchJSONDataFromURL, HttpMethod } from '../../utils';\nimport { GEN3_WTS_API } from '../../constants';\nimport { ExternalProvider } from './types';\n\nlet cachedToken: string | null = null;\n\nexport class CsrfTokenError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'CsrfTokenError';\n }\n}\n\nexport const getCsrfToken = async (): Promise<string> => {\n if (cachedToken) return cachedToken;\n\n // Get the current state\n const currentState = coreStore.getState();\n\n // Check if token is already in the RTK Query cache\n const tokenResult = userAuthApi.endpoints.getCSRF.select()(currentState);\n\n if (tokenResult?.data?.csrfToken) {\n cachedToken = tokenResult.data.csrfToken;\n return cachedToken;\n }\n\n // If not in cache, trigger the query manually\n try {\n const result = await coreStore.dispatch(\n userAuthApi.endpoints.getCSRF.initiate(),\n );\n\n if ('error' in result) {\n throw new CsrfTokenError(\n `Failed to fetch CSRF token: ${JSON.stringify(result.error)}`,\n );\n }\n\n if (!result.data) {\n throw new CsrfTokenError('No token received from server');\n }\n\n cachedToken = result.data.csrfToken;\n return cachedToken;\n } catch (error) {\n console.error('Failed to fetch CSRF token:', error);\n throw error;\n }\n};\n\ninterface RequestOptions extends RequestInit {\n headers?: HeadersInit;\n}\n\nexport const makeAuthenticatedRequest = async <T>(\n url: string,\n options: RequestOptions = {},\n): Promise<T> => {\n const csrfToken = await getCsrfToken();\n\n const response = await fetch(url, {\n ...options,\n headers: {\n ...options.headers,\n 'X-CSRF-Token': csrfToken,\n 'Content-Type': 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n return response.json() as Promise<T>;\n};\n\ninterface ExternalProviders {\n providers: ExternalProvider[];\n}\n\ninterface ExternalProvidersResponse extends ExternalProviders {\n error?: Error;\n}\n\nexport const queryWTSFederatedLoginStatus = async (\n signal?: AbortSignal,\n): Promise<ExternalProvidersResponse> => {\n try {\n const results = await fetchJSONDataFromURL<ExternalProviders>(\n `${GEN3_WTS_API}/external_oidc/`,\n false,\n HttpMethod.GET,\n undefined,\n signal,\n );\n\n // Handle both null response and response without providers\n if (!results || !results.providers) {\n return { providers: [] };\n }\n\n return results;\n } catch (error: unknown) {\n return {\n providers: [],\n error: error instanceof Error ? error : new Error('Unknown error'),\n };\n }\n};\n","import { useEffect, useState } from 'react';\nimport { useGetExternalLoginsQuery } from './externalLoginsSlice';\nimport { ExternalProvider, FileMetadata } from './types';\nimport { GUID_PREFIX_PATTERN } from '../../constants';\nimport { resolveDRSObjectId } from '../drsResolver/utils';\nimport { queryWTSFederatedLoginStatus } from './utils';\n\n/**\n * Input is a list of files selected for download.\n * Output is a array of GUID prefixes\n * @param selectedFiles\n */\nconst gatherGUIDPrefixes = (selectedFiles: ReadonlyArray<FileMetadata>) => {\n return selectedFiles.reduce((acc, selectedFile) => {\n if (selectedFile.object_id) {\n const guidDomainPrefix = (\n selectedFile.object_id.match(GUID_PREFIX_PATTERN) || []\n ).shift();\n if (guidDomainPrefix) {\n if (!acc.includes(guidDomainPrefix)) {\n acc.push(guidDomainPrefix);\n }\n }\n }\n return acc;\n }, [] as string[]);\n};\n\n/**\n * Resolves DRS object ID from a list of guids using dataguids.org or other DRS resolver\n * @param guidPrefixes\n */\nconst resolveDRSPrefixes = async (guidPrefixes: string[]) => {\n return await resolveDRSObjectId(guidPrefixes);\n};\n\n// holds hostname of DRS server for each GUID\ninterface ResolvedGUID extends FileMetadata {\n url?: string;\n drsPrefix?: string;\n}\n\n/**\n * Given a list of object ids, extracts and DRS prefixes and resolves them to DRS server hostnames\n * then returns a list of resolved GUIDs, and a list of unresolved GUIDs\n * @param selectedFiles\n * @returns - {\n * resolvedDRSPrefixes: Record<string, string> - map of GUID prefixes to DRS server hostnames\n * resolvedFiles: ResolvedGUID[] - list of resolved GUIDs\n * unresolvedFiles: ResolvedGUID[] - list of unresolved GUIDs\n * }\n */\nconst resolveGUIDsInSelectedFiles = async (\n selectedFiles: ReadonlyArray<FileMetadata>,\n) => {\n if (!selectedFiles || selectedFiles.length === 0) {\n return {\n externalHosts: {},\n resolvedFiles: [],\n unresolvedFiles: [],\n };\n }\n\n const guidPrefixes = gatherGUIDPrefixes(selectedFiles);\n const resolvedDRSPrefixes = await resolveDRSPrefixes(guidPrefixes);\n\n const resolvedIds: ResolvedGUID[] = [];\n const unresolvedIds: ResolvedGUID[] = [];\n selectedFiles.forEach((selectedFile) => {\n if (selectedFile.object_id) {\n const guidDomainPrefix = (\n selectedFile.object_id.match(GUID_PREFIX_PATTERN) || []\n ).shift();\n if (guidDomainPrefix && resolvedDRSPrefixes[guidDomainPrefix]) {\n resolvedIds.push({\n ...selectedFile,\n drsPrefix: guidDomainPrefix,\n url: resolvedDRSPrefixes[guidDomainPrefix],\n });\n }\n } else {\n unresolvedIds.push(selectedFile);\n }\n });\n return {\n externalHosts: resolvedDRSPrefixes,\n resolvedFiles: resolvedIds,\n unresolvedFiles: unresolvedIds,\n };\n};\n\ninterface ExternalLoginStatus {\n providersToAuthenticate?: ExternalProvider[];\n missingProviders?: ExternalProvider[];\n error?: Error;\n}\nconst fetchExternalLogins = async (\n externalProviders: Array<ExternalProvider>,\n selectedFiles: ReadonlyArray<FileMetadata>,\n): Promise<ExternalLoginStatus> => {\n const providers = externalProviders ?? [];\n // find all the providers that do not have tokens\n const unauthenticatedProviders = providers.filter(\n (provider) => !provider.refresh_token_expiration,\n );\n\n try {\n const guidResolutions = await resolveGUIDsInSelectedFiles(selectedFiles);\n const providersToAuthenticate = unauthenticatedProviders.filter(\n (unauthenticatedProvider) =>\n Object.values(guidResolutions.externalHosts).includes(\n new URL(unauthenticatedProvider.base_url).hostname,\n ),\n );\n\n const missingProviders = providersToAuthenticate.filter(\n (provider) =>\n !Object.values(guidResolutions.externalHosts).includes(\n new URL(provider.base_url).hostname,\n ),\n );\n\n return {\n providersToAuthenticate: providersToAuthenticate,\n missingProviders: missingProviders,\n };\n } catch (error: unknown) {\n if (error instanceof Error) {\n return { error };\n }\n return { error: new Error('Unknown error') };\n }\n};\n\ninterface FederatedLoginStatusParams {\n selectedFiles: ReadonlyArray<FileMetadata>;\n}\n\nexport const useGetFederatedLoginStatus = ({\n selectedFiles,\n}: FederatedLoginStatusParams) => {\n const {\n data: wtsResults,\n isLoading: wstIsLoading,\n error: wtsError,\n } = useGetExternalLoginsQuery();\n\n // State to manage the asynchronous results\n const [result, setResult] = useState<ExternalLoginStatus | null>(null);\n\n useEffect(() => {\n const fetchData = async () => {\n if (wtsError || !wtsResults) {\n if (wtsError instanceof Error) setResult({ error: wtsError });\n else setResult({ error: new Error('Unknown error') });\n return;\n }\n\n const results = await fetchExternalLogins(\n wtsResults.providers,\n selectedFiles,\n );\n setResult(results);\n };\n\n // Only run if there's data to act on\n if (!wstIsLoading && wtsResults) {\n fetchData();\n }\n }, [selectedFiles, wstIsLoading, wtsError, wtsResults]);\n\n return {\n isLoading: wstIsLoading,\n data: result,\n error: result?.error || wtsError,\n };\n};\n\nexport const getFederatedLoginStatus = async (\n selectedFiles: ReadonlyArray<FileMetadata>,\n) => {\n const providers = await queryWTSFederatedLoginStatus();\n return await fetchExternalLogins(providers.providers, selectedFiles);\n};\n","import type { Middleware, Reducer } from '@reduxjs/toolkit';\nimport { createApi } from '@reduxjs/toolkit/query/react';\nimport { GraphQLError } from 'graphql';\nimport { JSONObject } from '../../types';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { CoreState } from '../../reducers';\nimport { getCookie } from 'cookies-next';\nimport { selectCSRFToken } from '../user';\n\nexport interface guppyFetchError {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly text: string;\n readonly variables?: Record<string, any>;\n}\n\nexport interface guppyApiSliceRequest {\n readonly query: string;\n readonly variables?: Record<string, unknown>;\n}\n\nexport interface guppyApiResponse<H = JSONObject> {\n readonly data: H;\n readonly errors: Record<string, string>;\n}\n\nexport interface SortOption {\n field: string;\n order: string;\n}\n\nexport interface TablePageOffsetProps {\n readonly pageSize?: number;\n readonly offset?: number;\n readonly sorts?: Array<SortOption>;\n readonly searchTerm?: string;\n}\n\n/**\n * Creates a base class core API for guppy API calls.\n * @returns: guppy core API with guppyAPIFetch base query\n */\nexport const guppyApi = createApi({\n reducerPath: 'guppy',\n\n // TODO: refactor to use fetchBaseQuery\n baseQuery: async (query: guppyApiSliceRequest, api) => {\n const csrfToken = selectCSRFToken(api.getState() as CoreState);\n\n let accessToken = undefined;\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n accessToken = getCookie('credentials_token');\n }\n\n const headers = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'X-CSRF-Token': csrfToken }),\n ...(accessToken && { Authorization: `Bearer ${accessToken}` }),\n };\n try {\n const response = await fetch(`${GEN3_GUPPY_API}/graphql`, {\n headers: headers,\n method: 'POST',\n body: JSON.stringify(query),\n });\n\n const data = await response.json();\n // Check the response for GraphQL errors\n if (data && 'errors' in data) {\n // Return an object with an 'error' property if GraphQL errors are present\n return {\n error: {\n message: data.errors[0].message,\n locations: data.errors[0].locations,\n },\n };\n }\n return { data };\n } catch (e: unknown) {\n if (e instanceof GraphQLError) {\n return {\n error: {\n message: e.message,\n locations: e.locations,\n path: e.path,\n },\n };\n }\n if (e instanceof Error) return { error: e.message };\n return { error: e };\n }\n },\n endpoints: () => ({}),\n});\n\nexport const guppyAPISliceMiddleware = guppyApi.middleware as Middleware;\nexport const guppyApiSliceReducerPath: string = guppyApi.reducerPath;\nexport const guppyApiReducer: Reducer = guppyApi.reducer as Reducer;\n","export interface Intersection {\n operator: 'and';\n operands: ReadonlyArray<Operation>;\n}\n\nexport interface Union {\n operator: 'or';\n operands: ReadonlyArray<Operation>;\n}\n\nexport interface Equals {\n operator: '=';\n field: string;\n operand: number | string | boolean;\n}\n\nexport interface NotEquals {\n operator: '!=';\n field: string;\n operand: number | string;\n}\n\nexport interface Includes {\n operator: 'in' | 'includes';\n field: string;\n operands: ReadonlyArray<string | number>;\n}\n\nexport interface Comparison {\n field: string;\n operand: string | number;\n}\n\nexport interface LessThan extends Comparison {\n operator: '<';\n}\n\nexport interface LessThanOrEquals extends Comparison {\n operator: '<=';\n}\n\nexport interface GreaterThan extends Comparison {\n operator: '>';\n}\n\nexport interface GreaterThanOrEquals extends Comparison {\n operator: '>=';\n}\n\nexport interface Exists {\n readonly operator: 'exists';\n readonly field: string;\n readonly operand: string | number;\n}\n\nexport interface Missing {\n readonly operator: 'missing';\n readonly field: string;\n}\n\nexport interface ExcludeIfAny {\n readonly operator: 'excludeifany';\n readonly field: string;\n readonly operands: ReadonlyArray<string | number>;\n}\n\nexport interface Excludes {\n readonly operator: 'excludes';\n readonly field: string;\n readonly operands: ReadonlyArray<string | number>;\n}\n\nexport interface NestedFilter {\n operator: 'nested';\n path: string;\n operand: Operation;\n}\n\nexport type Operation =\n | Intersection\n | Union\n | Includes\n | Equals\n | NotEquals\n | LessThan\n | LessThanOrEquals\n | GreaterThan\n | GreaterThanOrEquals\n | NestedFilter\n | Exists\n | ExcludeIfAny\n | Missing\n | Excludes;\n\nexport type OperationWithField =\n | Includes\n | Equals\n | NotEquals\n | LessThan\n | LessThanOrEquals\n | GreaterThan\n | GreaterThanOrEquals\n | ExcludeIfAny\n | Excludes\n | Missing\n | Exists;\n\ntype OperandsType = Includes | Excludes | ExcludeIfAny | Intersection | Union;\n\nexport interface FilterSet {\n readonly root: Record<string, Operation>;\n readonly mode: 'and' | 'or';\n}\n\nexport const isFilterSet = (input: any): input is FilterSet => {\n if (typeof input !== 'object' || input === null) {\n return false;\n }\n const { root, mode } = input;\n\n if (typeof root !== 'object' || root === null) {\n return false;\n }\n\n if (!['and', 'or'].includes(mode)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Type guard for Includes\n * @param o - operator to check\n * @category Filters\n */\nexport const isIncludes = (o: unknown): o is Includes =>\n (o as Includes).operator === 'includes' || (o as Includes).operator === 'in';\n\nexport const isUnion = (value: unknown): value is Union => {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as Union).operator === 'or' &&\n Array.isArray((value as Union).operands)\n );\n};\nexport const isIntersection = (value: unknown): value is Intersection => {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as Intersection).operator === 'and' &&\n Array.isArray((value as Intersection).operands)\n );\n};\n\n/**\n * Type guard for Union or Intersection\n * @param o - operator to check\n * @category Filters\n */\nexport const isIntersectionOrUnion = (\n o: Operation,\n): o is Intersection | Union =>\n (o as Intersection).operator === 'and' || (o as Union).operator === 'or';\n\nexport const isOperandsType = (\n operation: Operation,\n): operation is OperandsType => {\n return (operation as OperandsType)?.operands !== undefined;\n};\n\nexport const ifOperationWithField = (\n operation: Operation,\n): operation is OperationWithField => {\n return (operation as OperationWithField).field !== undefined;\n};\n\nexport const isNestedFilter = (\n operation: Operation,\n): operation is NestedFilter => {\n return (operation as NestedFilter).operator === 'nested';\n};\n\nexport interface OperationHandler<T> {\n handleEquals: (op: Equals) => T;\n handleNotEquals: (op: NotEquals) => T;\n handleLessThan: (op: LessThan) => T;\n handleLessThanOrEquals: (op: LessThanOrEquals) => T;\n handleGreaterThan: (op: GreaterThan) => T;\n handleGreaterThanOrEquals: (op: GreaterThanOrEquals) => T;\n handleIncludes: (op: Includes) => T;\n handleExcludes: (op: Excludes) => T;\n handleExcludeIfAny: (op: ExcludeIfAny) => T;\n handleIntersection: (op: Intersection) => T;\n handleUnion: (op: Union) => T;\n handleNestedFilter: (op: NestedFilter) => T;\n handleExists: (op: Exists) => T;\n handleMissing: (op: Missing) => T;\n}\n\n/**\n * Operand types for filter operations\n */\nexport type EnumFilterValue = ReadonlyArray<string | number>;\nexport type RangeFilterValue = string | number;\nexport type BooleanFilterValue = boolean;\nexport type SetFilterValue = ReadonlyArray<Operation>;\nexport type FilterValue =\n | EnumFilterValue\n | RangeFilterValue\n | BooleanFilterValue\n | SetFilterValue\n | undefined;\n\nexport type FacetBucket = {\n key: string;\n doc_count: number;\n};\n\nexport type HistogramBucket = {\n key: string | [number, number];\n count: number;\n};\n\nexport type IndexedFilterSet = Record<string, FilterSet>;\n\nexport const isIndexedFilterSetEmpty = (filters: IndexedFilterSet): boolean =>\n Object.values(filters).every(\n (filterSet) => Object.keys(filterSet).length === 0,\n );\n\nexport type UnionOrIntersection = Union | Intersection;\n\nexport const EmptyFilterSet: FilterSet = { mode: 'and', root: {} };\n","import { isEqual } from 'lodash';\nimport {\n EnumFilterValue,\n Equals,\n ExcludeIfAny,\n Excludes,\n Exists,\n FilterSet,\n FilterValue,\n GreaterThan,\n GreaterThanOrEquals,\n ifOperationWithField,\n Includes,\n Intersection,\n LessThan,\n LessThanOrEquals,\n Missing,\n NestedFilter,\n NotEquals,\n Operation,\n OperationHandler,\n OperationWithField,\n Union,\n} from './types';\n\nexport type OperatorWithFieldAndArrayOfOperands =\n | Includes\n | Excludes\n | ExcludeIfAny;\n\nexport const isOperationWithField = (\n operation: OperationWithField | Operation,\n): operation is OperationWithField => {\n return (operation as OperationWithField)?.field !== undefined;\n};\n\nexport const isOperatorWithFieldAndArrayOfOperands = (\n operation: unknown,\n): operation is OperatorWithFieldAndArrayOfOperands => {\n if (\n typeof operation === 'object' &&\n operation !== null &&\n 'operands' in operation &&\n Array.isArray(operation.operands) &&\n 'field' in operation &&\n typeof operation.field === 'string' // Assuming `field` should be a string\n ) {\n const { operator } = (operation as any).operator;\n return (\n operator === 'in' || operator === 'exclude' || operator === 'excludeifany'\n );\n }\n return false;\n};\n\nexport const extractFilterValue = (op: Operation): FilterValue => {\n const valueExtractorHandler = new ValueExtractorHandler();\n return handleOperation<FilterValue>(valueExtractorHandler, op);\n};\nexport const extractEnumFilterValue = (op: Operation): EnumFilterValue => {\n const enumValueExtractorHandler = new EnumValueExtractorHandler();\n const results = handleOperation<EnumFilterValue | undefined>(\n enumValueExtractorHandler,\n op,\n );\n return results ?? [];\n};\n\nconst assertNever = (x: never): never => {\n throw Error(`Exhaustive comparison did not handle: ${x}`);\n};\n\nexport const handleOperation = <T>(\n handler: OperationHandler<T>,\n op: Operation,\n): T => {\n switch (op.operator) {\n case '=':\n return handler.handleEquals(op);\n case '!=':\n return handler.handleNotEquals(op);\n case '<':\n return handler.handleLessThan(op);\n case '<=':\n return handler.handleLessThanOrEquals(op);\n case '>':\n return handler.handleGreaterThan(op);\n case '>=':\n return handler.handleGreaterThanOrEquals(op);\n case 'and':\n return handler.handleIntersection(op);\n case 'or':\n return handler.handleUnion(op);\n case 'nested':\n return handler.handleNestedFilter(op);\n case 'in':\n case 'includes':\n return handler.handleIncludes(op);\n case 'excludeifany':\n return handler.handleExcludeIfAny(op);\n case 'excludes':\n return handler.handleExcludes(op);\n case 'exists':\n return handler.handleExists(op);\n case 'missing':\n return handler.handleMissing(op);\n default:\n return assertNever(op);\n }\n};\n\n/**\n * Return true if a FilterSet's root value is an empty object\n * @param fs - FilterSet to test\n */\nexport const isFilterEmpty = (fs: FilterSet): boolean => isEqual({}, fs);\n\nexport interface FilterGroup {\n readonly filterIndex: number;\n readonly filter: FilterSet;\n}\n\nexport interface GQLEqual {\n '=': {\n [key: string]: string | number | boolean;\n };\n}\n\nexport interface GQLNotEqual {\n '!=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLLessThan {\n '<': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLLessThanOrEquals {\n '<=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLGreaterThan {\n '>': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLGreaterThanOrEquals {\n '>=': {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLIncludes {\n in: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLExcludes {\n exclude: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface GQLExists {\n not: {\n [key: string]: string | number;\n };\n}\n\nexport interface GQLMissing {\n is: {\n [key: string]: 'MISSING';\n };\n}\n\nexport interface GQLExcludeIfAny {\n excludeifany: {\n [key: string]: ReadonlyArray<string | number>;\n };\n}\n\nexport interface NumericFromTo {\n readonly from: number;\n readonly to: number;\n}\n\nexport interface GQLRange {\n range: {\n [key: string]: ReadonlyArray<{ ranges: NumericFromTo[] }>;\n };\n}\n\n/**\n * Type guard to check if an object is a GQLIntersection\n * @param value - The value to check\n * @returns True if the value is a GQLIntersection\n */\nexport const isGQLIntersection = (value: unknown): value is GQLIntersection => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'and' in value &&\n Array.isArray((value as GQLIntersection).and)\n );\n};\n\nexport interface GQLIntersection {\n and: ReadonlyArray<GQLFilter>;\n}\n\nexport interface GQLUnion {\n or: ReadonlyArray<GQLFilter>;\n}\n\n/**\n * Type guard to check if an object is a GQLIntersection\n * @param value - The value to check\n * @returns True if the value is a GQLIntersection\n */\nexport const isGQLUnion = (value: unknown): value is GQLUnion => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'or' in value &&\n Array.isArray((value as GQLUnion).or)\n );\n};\n\ntype NestedContents = GQLFilter & {\n path: string;\n};\n\nexport interface GQLNestedFilter {\n nested: NestedContents;\n}\n\nexport type GQLFilter =\n | GQLEqual\n | GQLNotEqual\n | GQLLessThan\n | GQLLessThanOrEquals\n | GQLGreaterThan\n | GQLGreaterThanOrEquals\n | GQLIncludes\n | GQLExcludes\n | GQLExcludeIfAny\n | GQLIntersection\n | GQLUnion\n | GQLExists\n | GQLMissing\n | GQLNestedFilter;\n\nexport class ToGqlHandler implements OperationHandler<GQLFilter> {\n handleEquals = (op: Equals): GQLEqual => ({\n '=': {\n [op.field]: op.operand,\n },\n });\n handleNotEquals = (op: NotEquals): GQLNotEqual => ({\n '!=': {\n [op.field]: op.operand,\n },\n });\n handleLessThan = (op: LessThan): GQLLessThan => ({\n '<': {\n [op.field]: op.operand,\n },\n });\n handleLessThanOrEquals = (op: LessThanOrEquals): GQLLessThanOrEquals => ({\n '<=': {\n [op.field]: op.operand,\n },\n });\n handleGreaterThan = (op: GreaterThan): GQLGreaterThan => ({\n '>': {\n [op.field]: op.operand,\n },\n });\n handleGreaterThanOrEquals = (\n op: GreaterThanOrEquals,\n ): GQLGreaterThanOrEquals => ({\n '>=': {\n [op.field]: op.operand,\n },\n });\n\n handleIncludes = (op: Includes): GQLIncludes => ({\n in: {\n [op.field]: op.operands,\n },\n });\n\n handleExcludes = (op: Excludes): GQLExcludes => ({\n exclude: {\n [op.field]: op.operands,\n },\n });\n\n handleExcludeIfAny = (op: ExcludeIfAny): GQLExcludeIfAny => ({\n excludeifany: {\n [op.field]: op.operands,\n },\n });\n\n handleIntersection = (op: Intersection): GQLIntersection => ({\n and: op.operands.map((x) =>\n convertFilterToGqlFilter(x),\n ) as ReadonlyArray<GQLFilter>,\n });\n\n handleUnion = (op: Union): GQLUnion => ({\n or: op.operands.map((x) => convertFilterToGqlFilter(x)),\n });\n\n handleMissing = (op: Missing): GQLMissing => ({\n is: {\n [op.field]: 'MISSING',\n },\n });\n\n handleExists = (op: Exists): GQLExists => ({\n not: {\n [op.field]: op?.operand ?? null,\n },\n });\n\n handleNestedFilter = (op: NestedFilter): GQLNestedFilter => {\n const child: GQLFilter = convertFilterToGqlFilter(op.operand);\n return {\n nested: {\n path: op.path,\n ...child,\n },\n } as GQLNestedFilter;\n };\n}\n\nexport const convertFilterToGqlFilter = (filter: Operation): GQLFilter => {\n const handler: OperationHandler<GQLFilter> = new ToGqlHandler();\n return handleOperation(handler, filter);\n};\n\nexport const convertFilterSetToGqlFilter = (\n fs: FilterSet,\n toplevelOp: 'and' | 'or' = 'and',\n): GQLFilter => {\n const fsKeys = Object.keys(fs.root);\n // if no keys return undefined\n if (fsKeys.length === 0) return { and: [] };\n\n return toplevelOp === 'and'\n ? { and: fsKeys.map((key) => convertFilterToGqlFilter(fs.root[key])) }\n : { or: fsKeys.map((key) => convertFilterToGqlFilter(fs.root[key])) };\n};\n\nexport interface GqlOperationHandler<T> {\n handleEquals: (op: GQLEqual) => T;\n handleNotEquals: (op: GQLNotEqual) => T;\n handleLessThan: (op: GQLLessThan) => T;\n handleLessThanOrEquals: (op: GQLLessThanOrEquals) => T;\n handleGreaterThan: (op: GQLGreaterThan) => T;\n handleGreaterThanOrEquals: (op: GQLGreaterThanOrEquals) => T;\n handleIncludes: (op: GQLIncludes) => T;\n handleExcludes: (op: GQLExcludes) => T;\n handleExcludeIfAny: (op: GQLExcludeIfAny) => T;\n handleIntersection: (op: GQLIntersection) => T;\n handleUnion: (op: GQLUnion) => T;\n handleNestedFilter: (op: GQLNestedFilter) => T;\n handleExists: (op: GQLExists) => T;\n handleMissing: (op: GQLMissing) => T;\n}\n\nexport const handleGqlOperation = <T>(\n handler: GqlOperationHandler<T>,\n op: GQLFilter,\n): T => {\n const operationKeys = Object.keys(op);\n\n if (operationKeys.includes('=')) {\n return handler.handleEquals(op as GQLEqual);\n }\n if (operationKeys.includes('!=')) {\n return handler.handleNotEquals(op as GQLNotEqual);\n }\n if (operationKeys.includes('<')) {\n return handler.handleLessThan(op as GQLLessThan);\n }\n if (operationKeys.includes('<=')) {\n return handler.handleLessThanOrEquals(op as GQLLessThanOrEquals);\n }\n if (operationKeys.includes('>')) {\n return handler.handleGreaterThan(op as GQLGreaterThan);\n }\n if (operationKeys.includes('>=')) {\n return handler.handleGreaterThanOrEquals(op as GQLGreaterThanOrEquals);\n }\n if (operationKeys.includes('in')) {\n return handler.handleIncludes(op as GQLIncludes);\n }\n if (operationKeys.includes('exclude')) {\n return handler.handleExcludes(op as GQLExcludes);\n }\n if (operationKeys.includes('excludeifany')) {\n return handler.handleExcludeIfAny(op as GQLExcludeIfAny);\n }\n if (operationKeys.includes('and')) {\n return handler.handleIntersection(op as GQLIntersection);\n }\n if (operationKeys.includes('or')) {\n return handler.handleUnion(op as GQLUnion);\n }\n if (operationKeys.includes('nested')) {\n return handler.handleNestedFilter(op as GQLNestedFilter);\n }\n if (operationKeys.includes('is')) {\n return handler.handleExists(op as GQLExists);\n }\n if (operationKeys.includes('not')) {\n return handler.handleMissing(op as GQLMissing);\n }\n return assertNever(op as never);\n};\n\nexport const convertGqlFilterToFilter = (gqlFilter: GQLFilter): Operation => {\n const handler: GqlOperationHandler<Operation> = new ToOperationHandler();\n return handleGqlOperation(handler, gqlFilter);\n};\n\n/**\n * Convert GQL to Filterset\n * Note assumes all GqlOperators have one field: value\n */\nclass ToOperationHandler implements GqlOperationHandler<Operation> {\n handleEquals = (op: GQLEqual): Equals => {\n const [field, value] = Object.entries(op['='])[0];\n return {\n operator: '=',\n field: field,\n operand: value,\n };\n };\n handleNotEquals = (op: GQLNotEqual): NotEquals => {\n const [field, value] = Object.entries(op['!='])[0];\n return {\n operator: '!=',\n field: field,\n operand: value,\n };\n };\n handleLessThan = (op: GQLLessThan): LessThan => {\n const [field, value] = Object.entries(op['<'])[0];\n return {\n operator: '<',\n field: field,\n operand: value,\n };\n };\n handleLessThanOrEquals = (op: GQLLessThanOrEquals): LessThanOrEquals => {\n const [field, value] = Object.entries(op['<='])[0];\n return {\n operator: '<=',\n field: field,\n operand: value,\n };\n };\n handleGreaterThan = (op: GQLGreaterThan): GreaterThan => {\n const [field, value] = Object.entries(op['>'])[0];\n return {\n operator: '>',\n field: field,\n operand: value,\n };\n };\n handleGreaterThanOrEquals = (\n op: GQLGreaterThanOrEquals,\n ): GreaterThanOrEquals => {\n const [field, value] = Object.entries(op['>='])[0];\n return {\n operator: '>=',\n field: field,\n operand: value,\n };\n };\n handleIncludes = (op: GQLIncludes): Includes => {\n const [field, value] = Object.entries(op.in)[0];\n return {\n operator: 'in',\n field: field,\n operands: value,\n };\n };\n handleExcludes = (op: GQLExcludes): Excludes => {\n const [field, value] = Object.entries(op.exclude)[0];\n return {\n operator: 'excludes',\n field: field,\n operands: value,\n };\n };\n handleExcludeIfAny = (op: GQLExcludeIfAny): ExcludeIfAny => {\n const [field, value] = Object.entries(op.excludeifany)[0];\n\n return {\n operator: 'excludeifany',\n field: field,\n operands: value,\n };\n };\n handleIntersection = (op: GQLIntersection): Intersection => ({\n operator: 'and',\n operands: op.and.map(convertGqlFilterToFilter),\n });\n handleUnion = (op: GQLUnion): Union => ({\n operator: 'or',\n operands: op.or.map(convertGqlFilterToFilter),\n });\n handleExists = (op: GQLExists): Exists => {\n const [field, value] = Object.entries(op.not)[0];\n return {\n operator: 'exists',\n field: field,\n operand: value,\n };\n };\n handleMissing = (op: GQLMissing): Missing => {\n const field = Object.keys(op.is)[0];\n return {\n operator: 'missing',\n field: field,\n };\n };\n handleNestedFilter = (op: GQLNestedFilter): NestedFilter => ({\n operator: 'nested',\n path: op.nested.path,\n operand: convertGqlFilterToFilter(op.nested),\n });\n}\n\n/**\n * Extract the operand values, if operands themselves have values, otherwise undefined.\n */\nexport class ValueExtractorHandler implements OperationHandler<FilterValue> {\n handleEquals: (op: Equals) => string | number | boolean = (op: Equals) =>\n op.operand;\n handleNotEquals: (op: NotEquals) => string | number = (op: NotEquals) =>\n op.operand;\n handleIncludes: (op: Includes) => ReadonlyArray<string | number> = (\n op: Includes,\n ) => op.operands;\n handleExcludes: (op: Excludes) => ReadonlyArray<string | number> = (\n op: Excludes,\n ) => op.operands;\n handleExcludeIfAny: (op: ExcludeIfAny) => ReadonlyArray<string | number> = (\n op: ExcludeIfAny,\n ) => op.operands;\n handleGreaterThanOrEquals: (op: GreaterThanOrEquals) => string | number = (\n op: GreaterThanOrEquals,\n ) => op.operand;\n handleGreaterThan: (op: GreaterThan) => string | number = (op: GreaterThan) =>\n op.operand;\n handleLessThan: (op: LessThan) => string | number = (op: LessThan) =>\n op.operand;\n handleLessThanOrEquals: (op: LessThanOrEquals) => string | number = (\n op: LessThanOrEquals,\n ) => op.operand;\n handleIntersection: (op: Intersection) => undefined = (_arg: Intersection) =>\n undefined;\n handleUnion: (op: Union) => undefined = (_: Union) => undefined;\n handleNestedFilter: (op: NestedFilter) => undefined = (_: NestedFilter) =>\n undefined;\n handleExists: (op: Exists) => undefined = (_: Exists) => undefined;\n handleMissing: (op: Missing) => undefined = (_: Missing) => undefined;\n}\n\n/**\n * Extract the operand values, if operands themselves have values, otherwise undefined.\n */\nexport class EnumValueExtractorHandler\n implements OperationHandler<EnumFilterValue | undefined>\n{\n handleEquals: (_: Equals) => undefined = (_: Equals) => undefined;\n handleNotEquals: (_: NotEquals) => undefined = (_: NotEquals) => undefined;\n handleIncludes: (op: Includes) => ReadonlyArray<string | number> = (\n op: Includes,\n ) => op.operands;\n handleExcludes: (op: Excludes) => ReadonlyArray<string | number> = (\n op: Excludes,\n ) => op.operands;\n handleExcludeIfAny: (op: ExcludeIfAny) => ReadonlyArray<string | number> = (\n op: ExcludeIfAny,\n ) => op.operands;\n handleGreaterThanOrEquals: (_: GreaterThanOrEquals) => undefined = (\n _: GreaterThanOrEquals,\n ) => undefined;\n handleGreaterThan: (_: GreaterThan) => undefined = (_: GreaterThan) =>\n undefined;\n handleLessThan: (op: LessThan) => undefined = (_: LessThan) => undefined;\n handleLessThanOrEquals: (op: LessThanOrEquals) => undefined = (\n _: LessThanOrEquals,\n ) => undefined;\n handleIntersection: (op: Intersection) => undefined = (_: Intersection) =>\n undefined;\n handleUnion: (op: Union) => undefined = (_: Union) => undefined;\n handleNestedFilter: (op: NestedFilter) => EnumFilterValue | undefined = (\n op: NestedFilter,\n ) => {\n return extractEnumFilterValue(op.operand);\n };\n handleExists: (op: Exists) => undefined = (_: Exists) => undefined;\n handleMissing: (op: Missing) => undefined = (_: Missing) => undefined;\n}\n\nexport const appendFilterToOperation = (\n filter: Intersection | Union | undefined,\n addition: Intersection | Union | undefined,\n): Intersection | Union => {\n if (filter === undefined && addition === undefined)\n return { operator: 'and', operands: [] };\n if (addition === undefined && filter) return filter;\n if (filter === undefined && addition) return addition;\n return { ...filter, operands: [...(filter?.operands || []), addition] } as\n | Intersection\n | Union;\n};\n\nexport const filterSetToOperation = (\n fs: FilterSet | undefined,\n): Operation | undefined => {\n if (!fs) return undefined;\n switch (fs.mode) {\n case 'and':\n return Object.keys(fs.root).length == 0\n ? undefined\n : {\n operator: fs.mode,\n operands: Object.keys(fs.root).map((k): Operation => {\n return fs.root[k];\n }),\n };\n }\n return undefined;\n};\n\n/**\n * Constructs a nested operation object based on the provided field and leaf operand.\n * If the field does not contain a dot '.', it either assigns the field to the leaf operand (if applicable)\n * or returns the leaf operand as is. When the field contains dots, it splits the field into parts,\n * creates a \"nested\" operation for the root field, and recursively constructs the nested structure\n * for the remaining portion of the field.\n *\n * @param {string} field - The hierarchical field path, with segments separated by dots (e.g., \"root.child\").\n * @param {Operation} leafOperand - The operation to be nested within the specified path.\n * @param parentPath - The parent path of the current field. Guppy nested filters require a parent path.\n * @param depth\n * @returns {Operation} A nested operation object that represents the structured path and operand.\n */\nexport const buildNestedGQLFilter = (\n field: string,\n leafOperand: GQLFilter,\n parentPath: string | undefined = undefined,\n): GQLFilter => {\n if (!field.includes('.')) {\n return leafOperand;\n }\n\n const splitFieldArray = field.split('.');\n const nextField = splitFieldArray.shift();\n\n if (!nextField) {\n console.warn('Invalid field path:', field);\n return leafOperand;\n }\n\n const currentPath = parentPath ? `${parentPath}.${nextField}` : nextField;\n\n return {\n nested: {\n path: currentPath,\n ...buildNestedGQLFilter(\n splitFieldArray.join('.'),\n leafOperand,\n currentPath,\n ),\n },\n };\n};\n\n/**\n * Constructs a nested operation object based on the provided field and leaf operand.\n * If the field does not contain a dot '.', it either assigns the field to the leaf operand (if applicable)\n * or returns the leaf operand as is. When the field contains dots, it splits the field into parts,\n * creates a \"nested\" operation for the root field, and recursively constructs the nested structure\n * for the remaining portion of the field.\n *\n * @param {string} field - The hierarchical field path, with segments separated by dots (e.g., \"root.child\").\n * @param {Operation} leafOperand - The operation to be nested within the specified path.\n * @param parentPath - The parent path of the current field. Guppy nested filters require a parent path.\n * @returns {Operation} A nested operation object that represents the structured path and operand.\n */\nexport const buildNestedFilterForOperation = (\n field: string,\n leafOperand: Operation,\n parentPath: string | undefined = undefined,\n): Operation => {\n if (!field.includes('.')) {\n // at the end of the path\n if (ifOperationWithField(leafOperand)) {\n // update the field for operations with a field\n return { ...leafOperand, field };\n }\n return leafOperand;\n }\n\n const splitFieldArray = field.split('.');\n const nextField = splitFieldArray.shift();\n\n if (!nextField) {\n console.warn('Invalid field path:', field);\n return leafOperand;\n }\n\n const currentPath = parentPath ? `${parentPath}.${nextField}` : nextField;\n\n return {\n operator: 'nested',\n path: currentPath,\n operand: buildNestedFilterForOperation(\n splitFieldArray.join('.'),\n leafOperand,\n currentPath,\n ),\n } as NestedFilter;\n};\n","const FieldNameOverrides: Record<string, string> = {\n gender: 'Sex',\n Gender: 'Sex',\n};\n\nconst COMMON_PREPOSITIONS = [\n 'a',\n 'an',\n 'and',\n 'at',\n 'but',\n 'by',\n 'for',\n 'in',\n 'is',\n 'nor',\n 'of',\n 'on',\n 'or',\n 'out',\n 'so',\n 'the',\n 'to',\n 'up',\n 'yet',\n];\n\nconst capitalize = (s: string): string =>\n s.length > 0 ? s[0].toUpperCase() + s.slice(1) : '';\n\nexport const trimFirstFieldNameToTitle = (\n fieldName: string,\n trim = false,\n): string => {\n if (trim) {\n const source = fieldName.slice(fieldName.indexOf('.') + 1);\n return fieldNameToTitle(source ? source : fieldName, 0);\n }\n return fieldNameToTitle(fieldName);\n};\n\n/**\n * Converts a filter name to a title,\n * For example files.input.experimental_strategy will get converted to Experimental Strategy\n * if sections == 2 then the output would be Input Experimental Strategy\n * @param fieldName input filter expected to be: string.firstpart_secondpart\n * @param sections number of \"sections\" string.string.string to got back from the end of the field\n */\n\nexport const fieldNameToTitle = (fieldName: string, sections = 1): string => {\n if (fieldName in FieldNameOverrides) {\n return FieldNameOverrides[fieldName];\n }\n if (fieldName === undefined) return 'No Title';\n\n return fieldName\n .split('.')\n .slice(-sections)\n .map((s) => s.split('_'))\n .flat()\n .map((word) =>\n COMMON_PREPOSITIONS.includes(word) ? word : capitalize(word),\n )\n .join(' ');\n};\n\n/**\n * Extracts the index name from the field name\n * @param fieldName\n */\nexport const extractIndexFromFullFieldName = (fieldName: string): string =>\n fieldName.split('.')[0];\n\n/**\n * prepend the index name to the field name\n */\nexport const prependIndexToFieldName = (\n fieldName: string,\n index: string,\n): string => `${index}.${fieldName}`;\n\n/**\n * extract the field name from the index.field name\n */\nexport const extractFieldNameFromFullFieldName = (fieldName: string): string =>\n fieldName.split('.').slice(1).join('.');\n\n/**\n * extract the field name and the index from the index.field name returning as a tuple\n */\nexport const extractIndexAndFieldNameFromFullFieldName = (\n fieldName: string,\n): [string, string] => {\n const [index, ...rest] = fieldName.split('.');\n return [index, rest.join('.')];\n};\n","import {\n FilterSet,\n isIntersectionOrUnion,\n isNestedFilter,\n Operation,\n} from '../filters';\nimport { type CohortId, StorageEntity } from './types';\n\nexport const defaultCohortNameGenerator = (): string =>\n `Custom cohort ${new Date()\n .toLocaleString('en-CA', {\n timeZone: 'America/Chicago',\n hour12: false,\n })\n .replace(',', '')}`;\n\nexport const isNameUnique = <T extends CohortId = CohortId>(\n entities: Array<StorageEntity<T>>,\n name: string,\n excludeId?: T,\n): boolean => {\n const trimmedName = name.trim();\n if (!trimmedName) return false;\n\n return !entities.some(\n (cohort) =>\n cohort &&\n cohort.id !== excludeId &&\n cohort.name.trim().toLowerCase() === trimmedName.toLowerCase(),\n );\n};\n\nexport const generateUniqueName = <T extends CohortId = CohortId>(\n entities: Array<StorageEntity<T>>,\n baseName: string,\n): string => {\n const trimmedBaseName = baseName.trim();\n\n // If base name is unique, use it\n if (isNameUnique(entities, trimmedBaseName)) {\n return trimmedBaseName;\n }\n\n // Find a unique name by appending numbers\n let counter = 1;\n let uniqueName: string;\n\n do {\n uniqueName = `${trimmedBaseName} (${counter})`;\n counter++;\n } while (!isNameUnique(entities, uniqueName));\n\n return uniqueName;\n};\n\n/**\n * This function takes a FilterSet object and a prefix string as input.\n * It filters the root property of the FilterSet object and returns a\n * new FilterSet object that only contains filters with field names\n * that start with the specified prefix.\n *\n * @param fs - The FilterSet object to filter\n * @param prefix - The prefix to filter by\n * @returns - A new FilterSet object that only contains filters with field names that start with the specified prefix\n * @category Filters\n */\nexport const extractFiltersWithPrefixFromFilterSet = (\n fs: FilterSet | undefined,\n prefix: string,\n): FilterSet => {\n if (fs === undefined || fs.root === undefined) {\n return { mode: 'and', root: {} } as FilterSet;\n }\n return Object.values(fs.root).reduce(\n (acc, filter: Operation) => {\n if (isIntersectionOrUnion(filter) || isNestedFilter(filter)) return acc;\n if (filter.field.startsWith(prefix)) {\n acc.root[filter.field] = filter;\n }\n return acc;\n },\n { mode: 'and', root: {} } as FilterSet,\n );\n};\n","import {\n createEntityAdapter,\n createSlice,\n type EntityState,\n type PayloadAction,\n} from '@reduxjs/toolkit';\nimport { type CoreState } from '../../reducers';\nimport {\n type FilterSet,\n type IndexedFilterSet,\n type Operation,\n} from '../filters';\nimport { defaultCohortNameGenerator, generateUniqueName } from './utils';\nimport { type Cohort, type CohortId } from './types';\nimport { customAlphabet } from 'nanoid';\n\n/**\n * Cohorts in Gen3 are defined as a set of filters for each index in the data.\n * This means one cohort id defined for all \"tabs\" in CohortBuilder (explorer)\n * Switching a cohort id means all the cohorts for the index are changed.\n */\n\nexport const DEFAULT_COHORT_NAME = 'Cohort';\nexport const NULL_COHORT_ID = 'null_cohort_id';\n\nexport interface CurrentCohortState {\n currentCohortId: string;\n message?: string[];\n}\n\ninterface UpdateFilterParams {\n index: string;\n field: string;\n filter: Operation;\n}\n\ninterface SetFilterParams {\n index: string;\n filters: FilterSet;\n}\n\ninterface SetAllIndexFiltersParams {\n filters: IndexedFilterSet;\n}\n\ninterface RemoveFilterParams {\n index: string;\n field: string;\n}\n\nexport const createCohortName = (postfix: string): string => {\n return `Custom Cohort ${postfix}`;\n};\n\ninterface ClearAllFilterParams {\n index: string;\n}\n\nexport const newCohort = ({\n filters = {},\n customName,\n}: {\n filters?: IndexedFilterSet;\n customName?: string;\n}): Cohort => {\n const ts = new Date().toISOString();\n const newName = customName ?? defaultCohortNameGenerator();\n const newId = createCohortId();\n return {\n name: newName,\n id: newId,\n filters: filters ?? {},\n modified: false,\n saved: false,\n createdDatetime: ts,\n modifiedDatetime: ts,\n counts: {},\n };\n};\n\nconst nanoid = customAlphabet('1234567890abcdef', 16);\n\nexport const createCohortId = (): string => nanoid();\n\nexport const cohortsAdapter = createEntityAdapter<Cohort, CohortId>({\n sortComparer: (a, b) => {\n if (a.modifiedDatetime <= b.modifiedDatetime) return 1;\n else return -1;\n },\n selectId: (cohort: Cohort) => cohort.id,\n});\n\n// Create an initial unsaved cohort\nconst initialCohort = newCohort({ customName: DEFAULT_COHORT_NAME });\n\nconst emptyInitialState = cohortsAdapter.getInitialState<CurrentCohortState>({\n currentCohortId: initialCohort.id,\n message: undefined, // message is used to inform frontend components of changes to the cohort.\n});\n\n// Set the initial cohort in the adapter state\nconst initialState = cohortsAdapter.setOne(emptyInitialState, initialCohort);\n\nconst getCurrentCohortId = (\n state: EntityState<Cohort, string> & CurrentCohortState,\n): CohortId => state.currentCohortId;\n\ninterface CreateCohortParams {\n name?: string;\n filters?: IndexedFilterSet;\n setAsCurrent?: boolean;\n}\n\ninterface UpdateCohortNameParams {\n id: string;\n name: string;\n}\n\n/**\n * Redux slice for cohort filters\n */\n\nconst cohortManagerSlice = createSlice({\n name: 'cohort',\n initialState: initialState,\n reducers: {\n createNewCohort: (state, action: PayloadAction<CreateCohortParams>) => {\n const baseName = action.payload.name || `Cohort`;\n const uniqueName = generateUniqueName(\n Object.values(state.entities),\n baseName,\n );\n\n const cohort = newCohort({\n filters: action.payload.filters,\n customName: uniqueName,\n });\n cohortsAdapter.addOne(state, cohort);\n if (action.payload?.setAsCurrent) {\n state.currentCohortId = cohort.id;\n }\n },\n\n updateCohortName: (\n state,\n action: PayloadAction<UpdateCohortNameParams>,\n ) => {\n const { id, name } = action.payload;\n cohortsAdapter.updateOne(state, {\n id: id,\n changes: {\n name: name,\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n removeCohort: (\n state,\n action: PayloadAction<{\n shouldShowMessage?: boolean;\n id: string;\n }>,\n ) => {\n const { id: cohortId } = action.payload;\n const removedCohortName = state.entities[cohortId].name;\n const totalCohorts = Object.keys(state.entities).length;\n if (totalCohorts <= 1) {\n cohortsAdapter.removeAll(state);\n const defaultCohort = newCohort({\n filters: {},\n customName: DEFAULT_COHORT_NAME,\n });\n cohortsAdapter.addOne(state, defaultCohort);\n state.currentCohortId = defaultCohort.id;\n if (action?.payload.shouldShowMessage) {\n state.message = [\n `deleteCohort|${removedCohortName}|${state.currentCohortId}`,\n ];\n }\n return;\n }\n\n cohortsAdapter.removeOne(state, cohortId);\n\n // deleted the current cohort so set to the most recent cohort\n if (state.currentCohortId === cohortId) {\n const remainingIds = Object.keys(state.entities);\n state.currentCohortId = remainingIds[0];\n }\n\n if (action?.payload.shouldShowMessage) {\n state.message = [\n `deleteCohort|${removedCohortName}|${state.currentCohortId}`,\n ];\n }\n },\n // adds a filter to the cohort filter set at the given index\n updateCohortFilter: (state, action: PayloadAction<UpdateFilterParams>) => {\n const { index, field, filter } = action.payload;\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n return;\n }\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: {\n ...state.entities[currentCohortId].filters,\n [index]: {\n mode:\n state.entities[currentCohortId]?.filters[index]?.mode ?? 'and',\n root: {\n ...(state.entities[currentCohortId]?.filters[index]?.root ??\n {}),\n [field]: filter,\n },\n },\n },\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n setCohortFilter: (state, action: PayloadAction<SetFilterParams>) => {\n const { index, filters } = action.payload;\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n console.error(`no cohort with id=${currentCohortId} defined`);\n return;\n }\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: {\n ...state.entities[currentCohortId].filters,\n [index]: filters,\n },\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n setCohortIndexFilters: (\n state,\n action: PayloadAction<SetAllIndexFiltersParams>,\n ) => {\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n console.error(`no cohort with id=${currentCohortId} defined`);\n return;\n }\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: action.payload.filters,\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n\n // removes a filter to the cohort filter set at the given index\n removeCohortFilter: (state, action: PayloadAction<RemoveFilterParams>) => {\n const { index, field } = action.payload;\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n console.error(`no cohort with id=${currentCohortId} defined`);\n return;\n }\n const filters = state.entities[currentCohortId]?.filters[index]?.root;\n if (!filters) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { [field]: _a, ...updated } = filters;\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: {\n ...state.entities[currentCohortId]?.filters,\n [index]: {\n mode: state.entities[currentCohortId].filters[index].mode,\n root: updated,\n },\n },\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n duplicateCohort: (state) => {\n const currentCohortId = getCurrentCohortId(state);\n const currentCohort = state.entities[currentCohortId];\n const newName = generateUniqueName(\n Object.values(state.entities),\n currentCohort.name,\n );\n const duplicatedCohort = newCohort({\n filters: { ...currentCohort.filters },\n customName: newName,\n });\n cohortsAdapter.addOne(state, {\n ...duplicatedCohort,\n counts: { ...currentCohort.counts },\n });\n state.currentCohortId = duplicatedCohort.id;\n },\n // removes all filters from the cohort filter set at the given index\n clearCohortFilters: (\n state,\n action: PayloadAction<ClearAllFilterParams>,\n ) => {\n const { index } = action.payload;\n const currentCohortId = getCurrentCohortId(state);\n\n if (!state.entities[currentCohortId]) {\n console.error(`no cohort with id=${currentCohortId} defined`);\n return;\n }\n const filters = state.entities[currentCohortId]?.filters[index]?.root;\n if (!filters) {\n return;\n }\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n filters: {\n ...state.entities[currentCohortId]?.filters,\n [index]: {\n mode: 'and',\n root: {},\n },\n },\n modified: true,\n modifiedDatetime: new Date().toISOString(),\n },\n });\n },\n updateCohortCounts: (\n state,\n action: PayloadAction<Record<string, number>>,\n ) => {\n const currentCohortId = getCurrentCohortId(state);\n const currentCohort = state.entities[currentCohortId];\n\n cohortsAdapter.updateOne(state, {\n id: currentCohortId,\n changes: {\n counts: {\n ...currentCohort.counts,\n ...action.payload,\n },\n },\n });\n },\n updateCohortIndexCountById: (\n state,\n action: PayloadAction<{\n index: string;\n cohortId: string;\n counts: number;\n }>,\n ) => {\n const { index, cohortId, counts } = action.payload;\n const cohort = state.entities[cohortId];\n\n cohortsAdapter.updateOne(state, {\n id: cohortId,\n changes: {\n counts: {\n ...cohort.counts,\n ...{ [index]: counts },\n },\n },\n });\n },\n setCurrentCohortId: (state, action: PayloadAction<string>) => {\n state.currentCohortId = action.payload;\n },\n /** @hidden */\n setCohortList: (state, action: PayloadAction<Cohort[]>) => {\n if (!action.payload) {\n cohortsAdapter.removeMany(state, state.ids);\n } else {\n cohortsAdapter.upsertMany(state, [...action.payload] as Cohort[]);\n }\n },\n },\n});\n\n/**\n * Returns the selectors for the cohorts EntityAdapter\n * @param state - the CoreState\n *\n * @hidden\n */\nexport const cohortSelectors = cohortsAdapter.getSelectors(\n (state: CoreState) => state.cohorts.cohortManager,\n);\n\n// Filter actions: addFilter, removeFilter, updateFilter\nexport const {\n createNewCohort,\n updateCohortFilter,\n setCohortFilter,\n setCohortIndexFilters,\n duplicateCohort,\n removeCohortFilter,\n clearCohortFilters,\n removeCohort,\n setCurrentCohortId,\n updateCohortName,\n updateCohortCounts,\n updateCohortIndexCountById,\n setCohortList,\n} = cohortManagerSlice.actions;\n\nexport const cohortReducer = cohortManagerSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport type { CoreState } from '../../reducers';\n\n// TODO: after multiple cohort support is merged move this to CohortBuilder\ntype ExpandedFiltersState = Record<string, Record<string, boolean>>;\n\nconst initialState: ExpandedFiltersState = {};\n\nconst expandSlice = createSlice({\n name: 'CohortBuilder/filterExpand',\n initialState: initialState,\n reducers: {\n toggleCohortBuilderCategoryFilter: (\n state,\n action: PayloadAction<{\n index: string;\n field: string;\n expanded: boolean;\n }>,\n ) => {\n return {\n ...state,\n [action.payload.index]: {\n ...state[action.payload.index],\n [action.payload.field]: action.payload.expanded,\n },\n };\n },\n toggleCohortBuilderAllFilters: (\n state,\n action: PayloadAction<{ index: string; expand: boolean }>,\n ) => {\n return {\n ...state,\n [action.payload.index]: Object.keys(state[action.payload.index]).reduce(\n (acc, k) => {\n acc[k] = action.payload.expand;\n return acc;\n },\n {} as Record<string, boolean>,\n ),\n };\n },\n },\n});\n\nexport const cohortBuilderFiltersExpandedReducer = expandSlice.reducer;\n\nexport const {\n toggleCohortBuilderCategoryFilter,\n toggleCohortBuilderAllFilters,\n} = expandSlice.actions;\n\nexport const selectCohortFilterExpanded = (\n state: CoreState,\n index: string,\n field: string,\n): boolean => state.cohorts.filtersExpanded?.[index]?.[field];\n\nexport const selectAllCohortFiltersCollapsed = (\n state: CoreState,\n index: string,\n): boolean =>\n index in state.cohorts.filtersExpanded\n ? Object.values(state.cohorts.filtersExpanded?.[index]).every((e) => !e)\n : false;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport type { CoreState } from '../../reducers';\nimport { CombineMode } from './types';\n\ntype CombineModeFiltersState = Record<string, Record<string, CombineMode>>;\n\nconst initialState: CombineModeFiltersState = {};\n\nconst expandSlice = createSlice({\n name: 'CohortBuilder/filterCombineMode',\n initialState: initialState,\n reducers: {\n setCohortFilterCombineMode: (\n state,\n action: PayloadAction<{\n index: string;\n field: string;\n mode: CombineMode;\n }>,\n ) => {\n return {\n ...state,\n [action.payload.index]: {\n ...state[action.payload.index],\n [action.payload.field]: action.payload.mode,\n },\n };\n },\n },\n});\n\nexport const cohortBuilderFiltersCombineModeReducer = expandSlice.reducer;\n\nexport const { setCohortFilterCombineMode } = expandSlice.actions;\n\nexport const selectCohortFilterCombineMode = (\n state: CoreState,\n index: string,\n field: string,\n): CombineMode => state.cohorts.filtersCombineMode?.[index]?.[field] ?? 'or';\n","import { createSlice, Draft, type PayloadAction } from '@reduxjs/toolkit';\nimport type { CoreState } from '../../reducers';\nimport { IndexAndField, SharedFieldMapping } from '../guppy';\n\nexport interface SharedFiltersState {\n shouldShareFilters: boolean; // if set filters will be added to all indexes when changed\n sharedFiltersMap: SharedFieldMapping; // mapping of shared filters\n}\n\nconst initialState: SharedFiltersState = {\n shouldShareFilters: false,\n sharedFiltersMap: {},\n};\n\nexport const cohortSharedFiltersSlice = createSlice({\n name: 'cohortSharedFilters',\n initialState: initialState,\n reducers: {\n setShouldShareFilters: (\n state: Draft<SharedFiltersState>,\n action: PayloadAction<boolean>,\n ) => {\n state.shouldShareFilters = action.payload;\n return state;\n },\n setSharedFilters: (\n state: Draft<SharedFiltersState>,\n action: PayloadAction<SharedFieldMapping>,\n ) => {\n state.sharedFiltersMap = action.payload;\n },\n },\n});\n\nexport const selectShouldShareFilters = (state: CoreState): boolean =>\n state.cohorts.sharedFilters.shouldShareFilters;\n\nexport const selectSharedFilters = (state: CoreState): SharedFieldMapping =>\n state.cohorts.sharedFilters.sharedFiltersMap;\n\nexport const selectSharedFiltersForFields = (\n state: CoreState,\n field: string,\n): Array<IndexAndField> =>\n state.cohorts.sharedFilters.sharedFiltersMap?.[field] ?? [field];\n\nexport const { setShouldShareFilters, setSharedFilters } =\n cohortSharedFiltersSlice.actions;\n\nexport const cohortSharedFiltersReducer = cohortSharedFiltersSlice.reducer;\n","import { combineReducers } from '@reduxjs/toolkit';\nimport { cohortReducer } from './cohortManagerSlice';\nimport { cohortBuilderFiltersExpandedReducer } from './filterExpandSlice';\nimport { cohortBuilderFiltersCombineModeReducer } from './filterCombineModeSlice';\nimport { cohortSharedFiltersReducer } from './sharedFiltersSlice';\n\nexport const cohortReducers = combineReducers({\n filtersExpanded: cohortBuilderFiltersExpandedReducer,\n filtersCombineMode: cohortBuilderFiltersCombineModeReducer,\n sharedFilters: cohortSharedFiltersReducer,\n cohortManager: cohortReducer,\n});\n","import { gen3ServicesReducer } from './features/gen3/gen3Api';\nimport { combineReducers } from '@reduxjs/toolkit';\nimport { userReducer } from './features/user/userSlice';\nimport { gen3AppReducer } from './features/gen3Apps/gen3AppsSlice';\nimport { drsHostnamesReducer } from './features/drsResolver';\nimport { modalReducer } from './features/modals/modalsSlice';\nimport { activeWorkspaceReducer } from './features/workspace/workspaceSlice';\nimport { cartReducer, cartReducerPath } from './features/cart';\nimport {\n guppyApiReducer,\n guppyApiSliceReducerPath,\n} from './features/guppy/guppyApi'; // Do not shorten\nimport {\n userAuthApiReducer,\n userAuthApiReducerPath,\n} from './features/user/userSliceRTK';\nimport { cohortReducers } from './features/cohort/reducers';\n\nexport const rootReducer = combineReducers({\n gen3Services: gen3ServicesReducer,\n user: userReducer,\n gen3Apps: gen3AppReducer,\n drsHostnames: drsHostnamesReducer,\n modals: modalReducer,\n cohorts: cohortReducers,\n activeWorkspace: activeWorkspaceReducer,\n [guppyApiSliceReducerPath]: guppyApiReducer,\n [userAuthApiReducerPath]: userAuthApiReducer,\n [cartReducerPath]: cartReducer,\n});\n\nexport type CoreState = ReturnType<typeof rootReducer>;\n","import { JSONArray, JSONObject } from '../../types';\nimport { FILE_DELIMITERS } from '../../constants';\nimport { flatten } from 'flat';\nimport Papa, { UnparseConfig } from 'papaparse';\n\n/**\n * Flattens a deep nested JSON object skipping\n * the first level to avoid potentially flattening\n * non-nested data.\n * @param {JSON} json\n */\nexport function flattenJson(json: JSONObject) {\n const flattenedJson: JSONArray = [];\n Object.keys(json).forEach((key) => {\n flattenedJson.push(flatten(json[key], { delimiter: '_' }));\n });\n return flattenedJson;\n}\n\n/**\n * Converts JSON based on a config.\n * @param {JSON} json\n * @param {Object} config\n */\nexport async function conversion(json: JSONArray, config: UnparseConfig) {\n return Papa.unparse(json, config);\n}\n\n/**\n * Converts JSON to a specified file format.\n * Defaults to JSON if file format is not supported.\n * @param {JSON} json\n * @param {string} format\n */\nexport async function jsonToFormat(\n json: JSONObject,\n format: keyof typeof FILE_DELIMITERS,\n) {\n if (Object.keys(FILE_DELIMITERS).includes(format)) {\n const flatJson = flattenJson(json);\n const data = await conversion(flatJson, {\n delimiter: FILE_DELIMITERS[format] as string,\n });\n return data;\n }\n return json;\n}\n","import { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\nexport type JSONValue =\n | string\n | number\n | boolean\n | null\n | JSONArray\n | JSONObject;\n\nexport interface JSONObject {\n [key: string]: JSONValue;\n}\n\nexport type JSONArray = JSONValue[];\n\n// type guard functions\nexport const isHistogramRangeData = (key: any): key is [number, number] => {\n return (\n Array.isArray(key) &&\n key.length === 2 &&\n key.every((item) => typeof item === 'number')\n );\n};\n\nexport const isJSONObject = (data: any): data is JSONObject => {\n return typeof data === 'object' && data !== null && !Array.isArray(data);\n};\n\nexport const isJSONValue = (data: unknown): data is JSONValue => {\n return (\n typeof data === 'string' ||\n typeof data === 'number' ||\n typeof data === 'boolean' ||\n (Array.isArray(data) && data.every(isJSONValue)) ||\n isJSONObject(data)\n );\n};\n\nexport const isJSONValueArray = (data: JSONValue): data is JSONArray => {\n return Array.isArray(data) && data.every(isJSONValue);\n};\n\nexport interface HistogramData {\n key: string | [number, number];\n count: number;\n}\n\nexport interface HistogramDataAsStringKey {\n key: string;\n count: number;\n}\n\nexport type HistogramDataArray = Array<HistogramData>;\n\nexport interface StatValues {\n count: number | null;\n min: number | null;\n max: number | null;\n avg: number | null;\n sum: number | null;\n stddev: number | null;\n median: number | null;\n p25: number | null;\n p50: number | null;\n p75: number | null;\n}\n\nexport type StatsValuesArray = Array<Partial<StatValues>>;\n\nconst isValidObject = (input: any): boolean =>\n typeof input === 'object' && input !== null;\n\nexport const isHistogramData = (data: any): data is HistogramData => {\n return isValidObject(data) && 'key' in data && 'count' in data;\n};\n\nexport const isHistogramDataArray = (input: any): input is HistogramData[] => {\n if (!isValidObject(input) || !Array.isArray(input.histogram)) {\n return false;\n }\n return input.histogram.every(isHistogramData);\n};\n\nexport interface HistogramDataCollection {\n histogram: HistogramDataArray;\n}\n\nexport const isHistogramDataCollection = (\n obj: any,\n): obj is HistogramDataCollection => {\n return (\n isValidObject(obj) && 'histogram' in obj && isHistogramData(obj.histogram)\n );\n};\n\nexport interface GuppyAggregationData {\n [key: string]: HistogramDataCollection;\n}\n\n// Type guard function for GuppyAggregationData interface\nexport const isGuppyAggregationData = (\n obj: any,\n): obj is GuppyAggregationData => {\n if (!isValidObject(obj)) return false;\n\n for (const key in obj) {\n if (!isHistogramDataCollection(obj[key])) {\n return false;\n }\n }\n\n return true;\n};\n\nexport const isHistogramDataAnEnum = (data: unknown): data is HistogramData => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'key' in data &&\n 'count' in data &&\n typeof data.key === 'string' &&\n typeof data.count === 'number'\n );\n};\n\nexport const isStatsValue = (item: unknown): item is Partial<StatValues> => {\n if (typeof item !== 'object' || item === null) {\n return false;\n }\n\n const obj = item as Record<string, unknown>;\n\n // Check that all present properties have correct types\n const numericFields = [\n 'count',\n 'min',\n 'max',\n 'avg',\n 'sum',\n 'stddev',\n 'median',\n ];\n for (const field of numericFields) {\n if (field in obj && typeof obj[field] !== 'number') {\n return false;\n }\n }\n\n // Check percentiles structure if present\n if ('percentiles' in obj) {\n const percentiles = obj.percentiles;\n if (typeof percentiles !== 'object' || percentiles === null) {\n return false;\n }\n const pObj = percentiles as Record<string, unknown>;\n const requiredPercentiles = ['p25', 'p50', 'p75'];\n for (const p of requiredPercentiles) {\n if (p in pObj && typeof pObj[p] !== 'number') {\n return false;\n }\n }\n }\n\n return true;\n};\n\nexport const isStatsValuesArray = (data: unknown): data is StatsValuesArray => {\n return Array.isArray(data) && data.every(isStatsValue);\n};\n\nexport const isHistogramDataAArray = (\n data: any,\n): data is HistogramDataArray => {\n return Array.isArray(data) && data.every(isHistogramData);\n};\n\nexport const isHistogramDataArrayAnEnum = (data: any): boolean => {\n return Array.isArray(data) && data.every(isHistogramDataAnEnum);\n};\n\nexport const isHistogramDataArrayARange = (data: any): boolean => {\n return (\n Array.isArray(data) && data.every((item) => isHistogramRangeData(item.key))\n );\n};\n\n/**\n * Type predicate to narrow an unknown error to `FetchBaseQueryError`\n */\nexport function isFetchBaseQueryError(\n error: unknown,\n): error is FetchBaseQueryError {\n return typeof error === 'object' && error != null && 'status' in error;\n}\n\n/**\n * Type predicate to narrow an unknown error to an object with a string 'message' property\n */\nexport function isErrorWithMessage(\n error: unknown,\n): error is { message: string } {\n return (\n typeof error === 'object' &&\n error != null &&\n 'message' in error &&\n typeof (error as any).message === 'string'\n );\n}\n\ninterface ParsingError {\n status: 'PARSING_ERROR';\n originalStatus: number;\n data: string;\n error: string;\n}\n\nexport interface HttpError {\n status: number;\n data: unknown;\n}\n\nexport function isHttpStatusError(error: unknown): error is HttpError {\n return (\n typeof error === 'object' &&\n error != null &&\n 'status' in error &&\n typeof error.status === 'number'\n );\n}\n\n/**\n * Type predicate to narrow an unknown error to an object with a string 'message' property\n */\nexport function isFetchParseError(error: unknown): error is ParsingError {\n return (\n typeof error === 'object' &&\n error != null &&\n 'originalStatus' in error &&\n 'status' in error &&\n error['status'] === 'PARSING_ERROR'\n );\n}\n\nexport type AggregationsData = Record<string, HistogramDataArray>;\n\nexport type StatsData = Record<string, StatsValuesArray>;\n\n/**\n * Represents the results of a guppy aggregation query\n */\nexport interface GuppyAggregationsResponse {\n _aggregation: Record<string, AggregationsData>;\n}\n\n/**\n * Represents a manifest item.\n * @interface ManifestItem\n */\nexport interface ManifestItem {\n [k: string]: string | number | boolean | string[] | undefined;\n object_id: string;\n file_size?: number;\n file_name?: string;\n}\n\nexport interface StorageOperationResults {\n isError?: boolean;\n status: number;\n message: string;\n}\n\nexport interface DataFetchingResult<T> extends DataFetchingStatus {\n readonly data: T;\n}\n\nexport interface DataFetchingStatus {\n readonly isSuccess?: boolean;\n readonly isFetching?: boolean;\n readonly isError?: boolean;\n readonly isUninitialized?: boolean;\n readonly error?: string;\n}\n\nexport type DataFetchingHook<T> = () => DataFetchingResult<T>;\n","import {\n DownloadFromGuppyParams,\n GuppyDownloadDataParams,\n IndexAndField,\n} from './types';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { selectCSRFToken } from '../user';\nimport { coreStore } from '../../store';\nimport { convertFilterSetToGqlFilter } from '../filters';\nimport { jsonToFormat } from './conversion';\nimport { isJSONObject } from '../../types';\nimport { JSONPath } from 'jsonpath-plus';\nimport { getCookie } from 'cookies-next';\n\n/**\n * Represents a configuration for making a fetch request.\n *\n * @typedef {Object} FetchConfig\n * @property {string} method - The HTTP method to use for the request.\n * @property {Object<string, string>} headers - The headers to include in the request.\n * @property {string} body - The request body.\n */\nexport type FetchConfig = {\n method: string;\n headers: Headers;\n body: string;\n};\n\n/**\n * Prepares a URL for downloading by appending '/download' to the provided apiUrl.\n *\n * @param {string} apiUrl - The base URL to be used for preparing the download URL.\n * @returns {URL} - The prepared download URL as a URL object.\n */\nconst prepareUrl = (apiUrl: string) => `${apiUrl}/download`;\n\n/**\n * Prepares a fetch configuration object for downloading files from Guppy.\n *\n * @param {GuppyDownloadDataParams} parameters - The parameters to include in the request body.\n * @param {string} csrfToken - The CSRF token to include in the request headers.\n * @returns {FetchConfig} - The prepared fetch configuration object.\n */\nconst prepareFetchConfig = (\n parameters: GuppyDownloadDataParams,\n csrfToken?: string,\n): FetchConfig => {\n const headers: Headers = new Headers({\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n ...(csrfToken !== undefined && { 'X-CSRF-Token': csrfToken }),\n });\n\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n const accessToken = getCookie('credentials_token');\n if (accessToken) headers.set('Authorization', `Bearer ${accessToken}`);\n }\n\n return {\n method: 'POST',\n headers: headers,\n body: JSON.stringify({\n type: parameters.type,\n filter: convertFilterSetToGqlFilter(parameters.filter),\n accessibility: parameters.accessibility,\n fields: parameters?.fields,\n sort: parameters?.sort,\n }),\n };\n};\n\n/**\n * Downloads a file from Guppy using the provided parameters.\n * It will optionally convert the data to the specified format.\n *\n * @param {DownloadFromGuppyParams} parameters - The parameters to use for the download request.\n * @param onStart - The function to call when the download starts.\n * @param onDone - The function to call when the download is done.\n * @param onError - The function to call when the download fails.\n * @param onAbort - The function to call when the download is aborted.\n * @param signal - AbortSignal to use for the request.\n */\nexport const downloadFromGuppyToBlob = async ({\n parameters,\n onStart = () => null,\n onDone = (_: Blob) => null,\n onError = (_: Error) => null,\n onAbort = () => null,\n signal = undefined,\n}: DownloadFromGuppyParams) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n onStart?.();\n\n const url = prepareUrl(GEN3_GUPPY_API);\n const fetchConfig = prepareFetchConfig(parameters, csrfToken);\n\n fetch(url.toString(), {\n ...fetchConfig,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit)\n .then(async (response: Response) => {\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n\n let jsonData = await response.json();\n if (parameters?.rootPath && parameters.rootPath) {\n // if rootPath is provided, extract the data from the rootPath\n jsonData = JSONPath({\n json: jsonData,\n path: `$.[${parameters.rootPath}]`,\n resultType: 'value',\n });\n }\n // convert the data to the specified format and return a Blob\n let str = '';\n if (parameters.format === 'json') {\n str = JSON.stringify(jsonData);\n } else {\n const convertedData = await jsonToFormat(jsonData, parameters.format);\n if (isJSONObject(convertedData)) {\n str = JSON.stringify(convertedData, null, 2);\n } else {\n str = convertedData;\n }\n }\n return new Blob([str], {\n type: 'application/json',\n });\n })\n .then((blob) => onDone?.(blob))\n .catch((error) => {\n // Abort is handle as an exception\n if (error.name == 'AbortError') {\n // handle abort()\n onAbort?.();\n }\n onError?.(error);\n });\n};\n\nexport const downloadJSONDataFromGuppy = async ({\n parameters,\n onAbort = () => null,\n signal = undefined,\n}: DownloadFromGuppyParams) => {\n const csrfToken = selectCSRFToken(coreStore.getState());\n\n const url = prepareUrl(GEN3_GUPPY_API);\n const fetchConfig = prepareFetchConfig(parameters, csrfToken);\n\n try {\n const response = await fetch(url.toString(), {\n ...fetchConfig,\n ...(signal ? { signal: signal } : {}),\n } as RequestInit);\n\n let jsonData = await response.json();\n if (parameters?.rootPath && parameters.rootPath) {\n // if rootPath is provided, extract the data from the rootPath\n jsonData = JSONPath({\n json: jsonData,\n path: `$.[${parameters.rootPath}]`,\n resultType: 'value',\n });\n }\n // convert the data to the specified format and return a Blob\n return jsonData;\n } catch (error: any) {\n // Abort is handle as an exception\n if (error.name == 'AbortError') {\n // handle abort()\n onAbort?.();\n }\n throw new Error(error);\n }\n};\n\nexport const groupSharedFields = (data: Record<string, string[]>) => {\n const reverseIndex: Record<string, Set<string>> = {};\n\n // Build reverse index: track which root keys contain each element\n for (const rootKey in data) {\n data[rootKey].forEach((value) => {\n if (!reverseIndex[value]) {\n reverseIndex[value] = new Set();\n }\n reverseIndex[value].add(rootKey);\n });\n }\n\n return Object.entries(reverseIndex).reduce(\n (acc, [field, indexSet]) => {\n if (indexSet.size > 1) {\n acc[field] = Array.from(indexSet).map((x) => ({\n index: x,\n field: field,\n }));\n }\n return acc;\n },\n {} as Record<string, Array<IndexAndField>>,\n );\n};\n","import { AggregationsData, StatsData } from '../../types';\nimport { JSONPath } from 'jsonpath-plus';\n\n/**\n * Processes the histogram data from the given input object and returns an aggregated data object.\n *\n * @param {Record<string, unknown>} data - The input data object containing histogram information.\n * @returns {AggregationsData} An object containing the processed histogram data, structured as key-value pairs.\n */\nexport const processHistogramResponse = <\n T extends AggregationsData | StatsData,\n>(\n data: Record<string, unknown>,\n): T => {\n const valueData = JSONPath({\n json: data,\n path: '$..histogram',\n resultType: 'value',\n });\n\n const pointerData = JSONPath({\n json: data,\n path: '$..histogram',\n resultType: 'pointer',\n });\n\n const results = pointerData.reduce(\n (acc: T, element: Record<string, any>, idx: number) => {\n const key = element\n .slice(1)\n .replace(/\\/histogram/g, '')\n .replace(/\\//g, '.');\n return {\n ...acc,\n [key]: valueData[idx],\n };\n },\n {} as T,\n );\n return results as T;\n};\n\n/**\n * Adjusts histogram data in the provided object by rounding counts below a specified minimum value.\n *\n * This function traverses the input object for histogram data and updates it such that all count values\n * falling below the defined `minValue` are set to `-1`. By default, the `minValue` is set to `100`.\n *\n * @param {Record<string, unknown>} origData - The original input data containing histogram structures to modify.\n * @param {number} [minValue=100] - The minimum value of histogram counts. Counts below this value are replaced with `-1`.\n * @returns {Record<string, unknown>} - A new object containing the modified histogram data while preserving other properties.\n */\nexport const roundHistogramResponse = (\n origData: Record<string, unknown>,\n minValue: number = 100,\n): Record<string, AggregationsData> => {\n const data = { ...origData };\n\n const pointerData = JSONPath({\n json: data,\n path: '$..histogram',\n resultType: 'pointer',\n });\n\n if (!pointerData) {\n return {};\n }\n\n if (pointerData.length === 0) {\n return {};\n }\n\n pointerData.forEach((element: Record<string, any>) => {\n const key = element.slice(1).replace(/\\//g, '.');\n const histogramData = JSONPath({\n json: data,\n path: key,\n resultType: 'value',\n });\n histogramData?.[0]?.forEach((x: any) => {\n x.count = x.count < minValue ? -1 : x.count;\n });\n });\n\n return data as Record<string, AggregationsData>;\n};\n","export const customQueryStrForField = (\n field: string,\n query: string,\n depth: number = 0,\n): string => {\n const indent = ' '.repeat(depth);\n const splittedFieldArray = field.split('.');\n const splittedField = splittedFieldArray.shift();\n\n if (splittedFieldArray.length === 0) {\n return `${indent}${splittedField} ${query}`;\n }\n\n return `${indent}${splittedField} {\n${customQueryStrForField(splittedFieldArray.join('.'), query, depth + 1)}\n${indent}}`;\n};\n\n// TODO: refactor the function below using customQueryStrForEachField and a wrapper function that passes the query\nexport const histogramQueryStrForEachField = (field: string): string => {\n const splittedFieldArray = field.split('.');\n const splittedField = splittedFieldArray.shift();\n if (splittedFieldArray.length === 0) {\n return `\n ${splittedField} {\n histogram {\n key\n count\n }\n }`;\n }\n return `\n ${splittedField} {\n ${histogramQueryStrForEachField(splittedFieldArray.join('.'))}\n }`;\n};\n\nexport const statsQueryStrForEachField = (field: string): string => {\n const splittedFieldArray = field.split('.');\n const splittedField = splittedFieldArray.shift();\n if (splittedFieldArray.length === 0) {\n return `\n ${splittedField} {\n histogram {\n count\n min\n max\n avg\n sum\n }\n }`;\n }\n return `\n ${splittedField} {\n ${statsQueryStrForEachField(splittedFieldArray.join('.'))}\n }`;\n};\n\nexport const nestedHistogramQueryStrForEachField = (\n mainField: string,\n numericAggAsText: boolean,\n) => `\n ${mainField} {\n ${numericAggAsText ? 'asTextHistogram' : 'histogram'} {\n key\n count\n missingFields {\n field\n count\n }\n termsFields {\n field\n count\n terms {\n key\n count\n }\n }\n }\n }`;\n\nexport const rawDataQueryStrForEachField = (field: string): string => {\n const splitFieldArray = field.split('.');\n const splitField = splitFieldArray.shift();\n if (splitFieldArray.length === 0) {\n return `\n ${splitField}\n `;\n }\n return `\n ${splitField} {\n ${rawDataQueryStrForEachField(splitFieldArray.join('.'))}\n }`;\n};\n","import {\n buildNestedFilterForOperation,\n FilterSet,\n Intersection,\n NumericFromTo,\n Operation,\n} from '../filters';\nimport { FromToRange } from '../../types';\n\nexport interface Range<T> {\n field: string;\n content: ReadonlyArray<{ ranges: FromToRange<T>[] }>;\n}\n\nexport const convertRangeToGql = <T = string>(range: Range<T>): string => {\n const { field, content } = range;\n const gql = content.map((content) => {\n const { ranges } = content;\n return ranges.map((range) => {\n const { from, to, fromOp, toOp } = range;\n return `${field}${fromOp}${from}${toOp}${to}`;\n });\n });\n return gql.join(' OR ');\n};\n\nexport const convertNumericFromToArrayToFilters = (\n field: string,\n range: NumericFromTo,\n isNested: boolean = true,\n): Intersection => {\n const { from, to } = range;\n return {\n operator: 'and',\n operands: [\n isNested\n ? buildNestedFilterForOperation(field, {\n operator: '>=',\n field,\n operand: from,\n })\n : { operator: '>=', field, operand: from },\n isNested\n ? buildNestedFilterForOperation(field, {\n operator: '<',\n field,\n operand: to,\n })\n : { operator: '<', field, operand: to },\n ],\n } satisfies Intersection;\n};\n\nexport const rawDataQueryStrForEachField = (\n field: string,\n asTextHistogram: boolean = false,\n): string => {\n const splitFieldArray = field.split('.');\n const splitField = splitFieldArray.shift();\n let middleQuery: string = '';\n if (splitFieldArray.length === 0) {\n middleQuery = `${splitField} { ${asTextHistogram ? 'histogram: asTextHistogram' : 'histogram'} { count } }`;\n } else {\n middleQuery = `${splitField} { ${rawDataQueryStrForEachField(splitFieldArray.join('.'), asTextHistogram)} }`;\n }\n return middleQuery;\n};\n\ninterface NamedFilterRawDataParams {\n type: string;\n field: string;\n rangeName: string;\n prefix?: string;\n asTextHistogram?: boolean;\n}\n\nexport const buildAliasedNestedCountsQuery = ({\n type,\n field,\n rangeName,\n asTextHistogram = false,\n}: NamedFilterRawDataParams) => {\n const dataParams = [`filter: $${rangeName}`];\n const dataTypeLine = `${rangeName} : ${type} (accessibility: $accessibility ${dataParams}) {`;\n const processedFields = rawDataQueryStrForEachField(field, asTextHistogram);\n return `${dataTypeLine} ${processedFields} }`;\n};\n\nexport const removeKey = (\n key: string | number,\n { [key]: _, ...rest }: Record<string, Operation>,\n): Record<string, Operation> => rest;\n\nexport const buildRangeFilters = (\n field: string,\n ranges: Array<NumericFromTo>,\n filters: FilterSet,\n rangeBaseName: string,\n isNested: boolean = true,\n) => {\n return Object.entries(ranges).reduce(\n (acc: Record<string, FilterSet>, [, rangeValue], idx) => {\n acc[`${rangeBaseName}_${idx}`] = {\n mode: filters.mode,\n root: {\n ...filters.root,\n [field]: convertNumericFromToArrayToFilters(\n field,\n rangeValue,\n isNested,\n ),\n },\n } satisfies FilterSet;\n return acc;\n },\n {},\n );\n};\n\nexport const buildRangeQuery = (\n field: string,\n ranges: Array<NumericFromTo>,\n filters: FilterSet,\n rangeBaseName: string = 'range',\n index: string = 'cases',\n indexPrefix: string = '',\n isNested: boolean = true,\n asTextHistogram: boolean = false,\n) => {\n const rangeFilters = buildRangeFilters(\n field,\n ranges,\n filters,\n rangeBaseName,\n isNested,\n );\n\n let query = `query rangeQuery ($accessibility: Accessibility, ${Object.keys(\n rangeFilters,\n )\n .map((rangeKey) => `$${rangeKey}: JSON`)\n .join(',')} ) { ${indexPrefix}_aggregation {`;\n Object.keys(rangeFilters).forEach((rangeKey) => {\n const rangeQuery = buildAliasedNestedCountsQuery({\n type: index,\n field,\n rangeName: rangeKey,\n asTextHistogram,\n });\n query += rangeQuery + ' \\n';\n });\n\n query += `}}`;\n\n return {\n query: query,\n filters: rangeFilters,\n };\n};\n","import type { CoreState } from '../../reducers';\nimport { Cohort, CohortId } from './types';\nimport {\n EmptyFilterSet,\n FilterSet,\n IndexedFilterSet,\n Operation,\n} from '../filters';\nimport { cohortsAdapter, cohortSelectors } from './cohortManagerSlice';\n\nexport const {\n selectAll: selectAllCohorts,\n selectTotal: selectTotalCohorts,\n selectById: selectCohortById,\n selectIds: selectCohortIds,\n} = cohortsAdapter.getSelectors(\n (state: CoreState) => state.cohorts.cohortManager,\n);\n\n/**\n * Internally used selector for the exported selectora\n * @param state\n */\nconst getCurrentCohortFromCoreState = (state: CoreState): CohortId => {\n return state.cohorts.cohortManager.currentCohortId;\n};\nexport const selectCohortFilters = (state: CoreState): IndexedFilterSet => {\n const currentCohortId = getCurrentCohortFromCoreState(state);\n return state.cohorts.cohortManager.entities[currentCohortId]?.filters;\n};\nexport const selectCurrentCohortFilters = (\n state: CoreState,\n): IndexedFilterSet => {\n const currentCohortId = getCurrentCohortFromCoreState(state);\n return state.cohorts.cohortManager.entities[currentCohortId]?.filters;\n};\nexport const selectCurrentCohortId = (state: CoreState): CohortId => {\n return state.cohorts.cohortManager.currentCohortId;\n};\nexport const selectCurrentCohort = (state: CoreState): Cohort =>\n cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state));\nexport const selectCurrentCohortName = (state: CoreState): string =>\n cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state)).name;\n/**\n * Select a filter by its name from the current cohort. If the filter is not found\n * returns undefined.\n * @param state - Core\n * @param index which cohort index to select from\n * @param name name of the filter to select\n */\nexport const selectIndexedFilterByName = (\n state: CoreState,\n index: string,\n name: string,\n): Operation | undefined => {\n return cohortSelectors.selectById(state, getCurrentCohortFromCoreState(state))\n .filters[index]?.root[name];\n};\n/**\n * Returns the cohort's name given the id\n * @param state - the CoreState\n * @param cohortId - the cohort id\n * @category Cohort\n * @category Selectors\n */\nexport const selectCohortNameById = (\n state: CoreState,\n cohortId: string,\n): string | undefined => {\n const cohort = cohortSelectors.selectById(state, cohortId);\n return cohort?.name;\n};\n\n/**\n * Returns all the cohorts in the state\n * @param state - the CoreState\n *\n * @category Cohort\n * @category Selectors\n */\n\nexport const selectAvailableCohorts = (state: CoreState): Cohort[] =>\n cohortSelectors.selectAll(state);\n/**\n * Returns if the current cohort is modified\n * @param state - the CoreState\n * @category Cohort\n * @category Selectors\n * @hidden\n */\nexport const selectCurrentCohortModified = (\n state: CoreState,\n): boolean | undefined => {\n const cohort = cohortSelectors.selectById(\n state,\n getCurrentCohortFromCoreState(state),\n );\n return cohort?.modified;\n};\n/**\n * Returns if the current cohort has been saved\n * @param state - the CoreState\n * @category Cohort\n * @category Selectors\n * @hidden\n */\nexport const selectCurrentCohortSaved = (\n state: CoreState,\n): boolean | undefined => {\n const cohort = cohortSelectors.selectById(\n state,\n getCurrentCohortFromCoreState(state),\n );\n return cohort?.saved;\n};\n/**\n * Select a filter by its name from the current cohort. If the filter is not found\n * returns undefined.\n * @param state - Core\n * @param name name of the filter to select\n */\nexport const selectAvailableCohortByName = (\n state: CoreState,\n name: string,\n): Cohort | undefined =>\n cohortSelectors\n .selectAll(state)\n .find((cohort: Cohort) => cohort.name === name);\n/**\n * Select a filter from the index.\n * returns undefined.\n * @param state - Core\n * @param index which cohort index to select from\n */\nexport const selectIndexFilters = (\n state: CoreState,\n index: string,\n): FilterSet => {\n const cohort = cohortSelectors.selectById(\n state,\n getCurrentCohortFromCoreState(state),\n );\n if (!cohort) {\n console.error('No Cohort Defined');\n }\n return cohort?.filters?.[index] ?? EmptyFilterSet;\n};\n","import {\n Equals,\n ExcludeIfAny,\n Excludes,\n Exists,\n FilterSet,\n GreaterThan,\n GreaterThanOrEquals,\n Includes,\n Intersection,\n LessThan,\n LessThanOrEquals,\n Missing,\n NestedFilter,\n NotEquals,\n Operation,\n OperationHandler,\n Union,\n} from './types';\nimport { CoreState } from '../../reducers';\nimport {\n buildNestedGQLFilter,\n convertFilterToGqlFilter,\n GQLEqual,\n GQLExcludeIfAny,\n GQLExcludes,\n GQLExists,\n GQLFilter,\n GQLGreaterThan,\n GQLGreaterThanOrEquals,\n GQLIncludes,\n GQLIntersection,\n GQLLessThan,\n GQLLessThanOrEquals,\n GQLMissing,\n GQLNestedFilter,\n GQLNotEqual,\n GQLUnion,\n handleOperation,\n isGQLIntersection,\n isGQLUnion,\n} from './filters';\n\nimport { selectIndexFilters } from '../cohort/cohortManagerSelector';\n\n/**\n * Constructs a nested operation object based on the provided field and leaf operand.\n * If the field does not contain a dot '.', it either assigns the field to the leaf operand (if applicable)\n * or returns the leaf operand as is. When the field contains dots, it splits the field into parts,\n * creates a \"nested\" operation for the root field, and recursively constructs the nested structure\n * for the remaining portion of the field.\n *\n * @param {string} field - The hierarchical field path, with segments separated by dots (e.g., \"root.child\").\n * @param {Operation} leafOperand - The operation to be nested within the specified path.\n * @param parentPath - The parent path of the current field. Guppy nested filters require a parent path.\n * @param depth\n * @returns {Operation} A nested operation object that represents the structured path and operand.\n */\nexport const buildNestedWithParentPathGQLFilter = (\n field: string,\n leafOperand: GQLFilter,\n parentPath: string | undefined = undefined,\n): GQLFilter => {\n if (!field.includes('.')) {\n return leafOperand;\n }\n\n const splitFieldArray = field.split('.');\n const nextField = splitFieldArray.shift();\n\n if (!nextField) {\n console.warn('Invalid field path:', field);\n return leafOperand;\n }\n\n const currentPath = parentPath ? `${parentPath}.${nextField}` : nextField;\n\n return {\n nested: {\n path: currentPath,\n ...buildNestedGQLFilter(\n splitFieldArray.join('.'),\n leafOperand,\n currentPath,\n ),\n },\n };\n};\n\nexport const buildCohortGqlOperator = (\n fs: FilterSet | undefined,\n): GQLFilter | undefined => {\n if (!fs || !fs.root) return undefined;\n\n const fsKeys = Object.keys(fs.root);\n // if no keys return undefined\n if (fsKeys.length === 0) return undefined;\n\n // TODO consider changing FilterSet: mode to support joinOrToAll as FilterSet mode\n // find key using keyword \"joinOrToAll\"\n const joinOrToAllKey = fsKeys.filter((x) => x.includes('joinOrToAll'));\n\n switch (fs.mode) {\n case 'and':\n if (joinOrToAllKey.length === 1) {\n const firstJoinOrToAllKey = joinOrToAllKey[0];\n\n // Remove firstJoinOrToAllKey from Array\n fsKeys.splice(fsKeys.indexOf(firstJoinOrToAllKey), 1);\n\n const firstJoinOrToAllObj = fs.root[firstJoinOrToAllKey];\n // make sure type is or/ Union\n if (firstJoinOrToAllObj.operator === 'or') {\n return {\n or: firstJoinOrToAllObj?.operands.map((orObj) => {\n // go through each or statement and add all other filters to it\n return {\n and: [\n convertFilterToNestedGqlFilter(orObj),\n ...fsKeys.map((k): GQLFilter => {\n return convertFilterToNestedGqlFilter(fs.root[k]);\n }),\n ],\n };\n }),\n };\n } else {\n console.error(\n `function buildCohortGqlOperator expecting \"or\" received \"${firstJoinOrToAllObj.operator}\" on key \"${firstJoinOrToAllKey}\"`,\n );\n }\n } else if (joinOrToAllKey.length > 1) {\n console.error(\n `function buildCohortGqlOperator expecting only one joinOrToAll received: ${joinOrToAllKey.length}`,\n fsKeys,\n );\n }\n return {\n // TODO: Replace fixed AND with cohort top level operation like Union or Intersection\n [fs.mode]: fsKeys.map((k): GQLFilter => {\n return convertFilterToGqlFilter(fs.root[k]);\n }),\n };\n case 'or':\n return {\n [fs.mode]: fsKeys.map((k): GQLFilter => {\n return convertFilterToGqlFilter(fs.root[k]);\n }),\n };\n }\n};\n\nexport const selectCurrentCohortCaseFilters = (\n state: CoreState,\n index: string = 'cases',\n): FilterSet => selectIndexFilters(state, index);\n\n/**\n * Merged two FilterSets returning the merged pair.\n * @param a - first FilterSet\n * @param b - other FilterSet\n */\nexport const joinFilters = (a: FilterSet, b: FilterSet): FilterSet => {\n return { mode: a.mode, root: { ...a.root, ...b.root } };\n};\n\nexport const convertFilterSetToOperation = (\n fs: FilterSet | undefined,\n): Operation | undefined => {\n if (!fs) return undefined;\n switch (fs.mode) {\n case 'and':\n return Object.keys(fs.root).length == 0\n ? undefined\n : {\n operator: fs.mode,\n operands: Object.keys(fs.root).map((k): Operation => {\n return fs.root[k];\n }),\n };\n }\n return undefined;\n};\n\nexport const extractContents = (\n filter: GQLFilter,\n): readonly GQLFilter[] | undefined => {\n if (isGQLUnion(filter)) {\n return filter.or;\n }\n if (isGQLIntersection(filter)) {\n return filter.and;\n }\n return undefined;\n};\n\nexport class ToGqlAllNested implements OperationHandler<GQLFilter> {\n handleEquals = (op: Equals): GQLEqual | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '=': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '=': {\n [op.field]: op.operand,\n },\n };\n };\n handleNotEquals = (op: NotEquals): GQLNotEqual | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '!=': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '!=': {\n [op.field]: op.operand,\n },\n };\n };\n handleLessThan = (op: LessThan): GQLLessThan | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '<': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '<': {\n [op.field]: op.operand,\n },\n };\n };\n handleLessThanOrEquals = (\n op: LessThanOrEquals,\n ): GQLLessThanOrEquals | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '<=': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '<=': {\n [op.field]: op.operand,\n },\n };\n };\n handleGreaterThan = (op: GreaterThan): GQLGreaterThan | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '>': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '>': {\n [op.field]: op.operand,\n },\n };\n };\n handleGreaterThanOrEquals = (\n op: GreaterThanOrEquals,\n ): GQLGreaterThanOrEquals | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n '>=': { [leafField]: op.operand },\n }) as GQLNestedFilter;\n }\n return {\n '>=': {\n [op.field]: op.operand,\n },\n };\n };\n\n handleIncludes = (op: Includes): GQLIncludes | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n in: { [leafField]: op.operands },\n }) as GQLNestedFilter;\n }\n return {\n in: {\n [op.field]: op.operands,\n },\n };\n };\n\n handleExcludes = (op: Excludes): GQLExcludes | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n exclude: { [leafField]: op.operands },\n }) as GQLNestedFilter;\n }\n return {\n exclude: {\n [op.field]: op.operands,\n },\n };\n };\n\n handleExcludeIfAny = (\n op: ExcludeIfAny,\n ): GQLExcludeIfAny | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n excludeifany: { [leafField]: op.operands },\n }) as GQLNestedFilter;\n }\n return {\n excludeifany: {\n [op.field]: op.operands,\n },\n };\n };\n\n handleIntersection = (op: Intersection): GQLIntersection => ({\n and: op.operands.map((x) =>\n convertFilterToGqlFilter(x),\n ) as ReadonlyArray<GQLFilter>,\n });\n\n handleUnion = (op: Union): GQLUnion => ({\n or: op.operands.map((x) => convertFilterToGqlFilter(x)),\n });\n\n handleMissing = (op: Missing): GQLMissing | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n is: { [leafField]: 'MISSING' },\n }) as GQLNestedFilter;\n }\n return {\n is: {\n [op.field]: 'MISSING',\n },\n };\n };\n\n handleExists = (op: Exists): GQLExists | GQLNestedFilter => {\n if (op.field.includes('.')) {\n const leafField = op.field.split('.').at(-1) ?? 'unset';\n return buildNestedGQLFilter(op.field, {\n not: { [leafField]: op?.operand ?? null },\n }) as GQLNestedFilter;\n }\n return {\n not: {\n [op.field]: op?.operand ?? null,\n },\n };\n };\n\n handleNestedFilter = (op: NestedFilter): GQLNestedFilter => {\n const child: GQLFilter = convertFilterToGqlFilter(op.operand);\n return {\n nested: {\n path: op.path,\n ...child,\n },\n } as GQLNestedFilter;\n };\n}\n\nexport const convertFilterToNestedGqlFilter = (\n filter: Operation,\n): GQLFilter => {\n const handler: OperationHandler<GQLFilter> = new ToGqlAllNested();\n return handleOperation(handler, filter);\n};\n\nexport const convertFilterSetToNestedGqlFilter = (\n fs: FilterSet,\n toplevelOp: 'and' | 'or' = 'and',\n): GQLFilter => {\n const fsKeys = Object.keys(fs.root);\n // if no keys return undefined\n if (fsKeys.length === 0) return { and: [] };\n\n return toplevelOp === 'and'\n ? { and: fsKeys.map((key) => convertFilterToNestedGqlFilter(fs.root[key])) }\n : { or: fsKeys.map((key) => convertFilterToNestedGqlFilter(fs.root[key])) };\n};\n","import useSWR, { Fetcher, SWRResponse } from 'swr';\nimport { AggregationsData, JSONObject, StatsData } from '../../types';\nimport { Accessibility, GEN3_GUPPY_API } from '../../constants';\nimport { convertFilterSetToGqlFilter, FilterSet, GQLFilter, isFilterEmpty, } from '../filters';\nimport { guppyApi, guppyApiSliceRequest } from './guppyApi';\nimport { RangeQueryRequest, SharedFieldMapping } from './types';\n\nimport { groupSharedFields } from './utils';\nimport { processHistogramResponse } from './processing';\nimport {\n histogramQueryStrForEachField,\n nestedHistogramQueryStrForEachField,\n rawDataQueryStrForEachField,\n statsQueryStrForEachField,\n} from './queryGenerators';\nimport { buildRangeQuery } from './range';\nimport { convertFilterSetToNestedGqlFilter } from '../filters/nestedFilters';\n\nconst statusEndpoint = '/_status';\n\nexport interface GraphQLQuery {\n query: string;\n variables?: Record<string, unknown>;\n}\n\nexport const fetchJson: Fetcher<JSONObject, string> = async (url: string) => {\n const res = await fetch(url, {\n method: 'GET',\n headers: { 'Content-type': 'application/json' },\n });\n if (!res.ok) throw new Error('An error occurred while fetching the data.');\n return (await res.json()) as JSONObject;\n};\n\nexport const useGetStatus = (): SWRResponse<JSONObject, Error> => {\n const fetcher = () => fetchJson(`${GEN3_GUPPY_API}${statusEndpoint}`);\n return useSWR('explorerStatus', fetcher);\n};\n\nexport type AggregationResponse = Record<string, JSONObject>;\n\n/*\n returns all the fields for a given type\n @param type: the type to get fields for\n @returns: a list of fields for the given type\n */\n\ninterface GuppyBaseQueryParams {\n type: string;\n filters: FilterSet;\n accessibility?: Accessibility;\n indexPrefix?: string;\n filterName?: string;\n}\n\ninterface AccessibleDataSliceParams {\n type: string;\n fields: ReadonlyArray<string>;\n accessibility: Accessibility;\n indexPrefix?: string;\n}\n\ninterface QueryAggsParams extends GuppyBaseQueryParams {\n fields: ReadonlyArray<string>;\n filterSelf?: boolean;\n queryId?: string;\n}\n\ninterface QueryForSubAggsParams extends Omit<GuppyBaseQueryParams, 'filters'> {\n mainField: string;\n numericAggAsText: boolean;\n termsFields?: ReadonlyArray<string>;\n missingFields?: ReadonlyArray<string>;\n filters?: FilterSet;\n}\n\ninterface QueryCountsParams extends GuppyBaseQueryParams {\n queryId?: string;\n}\n\ninterface QueryForFileCountSummaryParams extends GuppyBaseQueryParams {\n field: string;\n}\n\nexport interface RawDataAndTotalCountsParams extends GuppyBaseQueryParams {\n fields: string[];\n sort?: ReadonlyArray<Record<string, 'asc' | 'desc'>>;\n offset?: number;\n size?: number;\n format?: string;\n}\n\nexport const explorerTags = guppyApi.enhanceEndpoints({\n addTagTypes: ['AGGS', 'COUNTS', 'STATS', 'TABLE_DATA', 'RAW_DATA'] as const,\n});\n\n/**\n * The main endpoint used in templating Exploration page queries.\n * Includes table, filter and aggregation query types and leverages guppyApi defined in ./gupplApi.ts\n * Query templates support filters where applicable\n *\n * @param endpoints - Defines endpoints used in Exploration page:\n * @param getAllFieldsForType - A mapping query that returns all property key names vertex types specified.\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#mapping-query\n * @param getAccessibleData - An aggregation histogram counts query that filters based on access type\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#accessibility-argument-for-regular-tier-access-level\n * @param getRawDataAndTotalCounts - Queries both _totalCount for selected vertex types and\n * tabular results containing the raw data in the rows of selected vertex types\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#1-total-count-aggregation\n * @param getAggs - An aggregated histogram counts query which outputs vertex property frequencies\n * @param getSubAggs - TODO: not sure what this one does. Looks like nested aggregation\n * @param getCounts - Returns total counts of a vertex type\n * @returns: A guppy API endpoint for templating queryable data displayed on the exploration page\n */\nexport const explorerApi = explorerTags.injectEndpoints({\n endpoints: (builder) => ({\n getAllFieldsForType: builder.query({\n query: ({\n type,\n indexPrefix = '',\n }: {\n type: string;\n indexPrefix?: string;\n }) => ({\n query: `{ ${indexPrefix}_mapping ${type} } }`,\n }),\n transformResponse: (response: Record<string, any>, _meta, params) => {\n return response[params.type];\n },\n }),\n getAccessibleData: builder.query({\n query: ({\n type,\n fields,\n accessibility,\n indexPrefix = '',\n }: AccessibleDataSliceParams) => {\n const fieldParts = fields.map(\n (field) => `${field} { histogram { key count } }`,\n );\n return {\n query: `${indexPrefix}_aggregation {\n ${type} (accessibility: ${accessibility}) {\n ${fieldParts.join(',')}\n }\n }`,\n };\n },\n }),\n getRawDataAndTotalCounts: builder.query({\n query: ({\n type,\n fields,\n filters,\n sort,\n offset = 0,\n size = 20,\n accessibility = Accessibility.ALL,\n format = undefined,\n indexPrefix = '',\n filterName = 'filter',\n }: RawDataAndTotalCountsParams) => {\n const gqlFilter = convertFilterSetToGqlFilter(filters);\n const params = [\n ...(sort ? ['$sort: JSON'] : []),\n ...(gqlFilter ? [`$${filterName}: JSON`] : []),\n ...(format ? ['$format: Format'] : []),\n ].join(',');\n const queryLine = `query getRawDataAndTotalCounts (${params}) {`;\n\n const dataParams = [\n ...(format ? ['format: $format'] : []),\n ...(sort ? ['sort: $sort'] : []),\n ...(gqlFilter ? [`filter: $${filterName}`] : []),\n ].join(',');\n const dataTypeLine = `${indexPrefix}${type} (accessibility: ${accessibility}, offset: ${offset}, first: ${size},\n ${dataParams}) {`;\n\n const typeAggsLine = `${type} (${\n gqlFilter && `filter: $${filterName},`\n } accessibility: ${accessibility}) {`;\n\n const processedFields = fields.map((field) =>\n rawDataQueryStrForEachField(field),\n );\n\n const query = `${queryLine}\n ${dataTypeLine}\n ${processedFields.join(' ')}\n }\n ${indexPrefix}_aggregation {\n ${typeAggsLine}\n _totalCount\n }\n }\n }`;\n const variables = {\n ...(sort && { sort }),\n ...(gqlFilter && { filter: gqlFilter }),\n ...(format && { format }),\n };\n return { query, variables };\n },\n transformErrorResponse: () => {\n return {\n data: {\n _aggregation: [],\n },\n };\n },\n // return . separated fields as proper values\n transformResponse: (response: Record<string, any>, _meta, args) => {\n const containsDots = args?.fields?.filter((f) => f.includes('.'));\n // check if dot seperated in arry and not object\n if (containsDots && containsDots.length > 0 && response.data) {\n const containsDotsUniqueBase = containsDots.reduce((acc, field) => {\n const partsArr = field.split('.');\n if (partsArr.length < 2) {\n throw new Error(\n \"Explorer does not support field with more than one '.' separator\",\n );\n }\n const basePart = partsArr[0];\n if (!acc.includes(basePart)) {\n acc.push(basePart);\n }\n return acc;\n }, [] as string[]);\n\n // checks if api is returning an array of objects for the base part\n // if so, it restructures the object to group the sub parts into arrays\n // e.g. {a: [{b: 1, c:2}, {b:3, c:4}]} becomes {a: {b: [1,3], c:[2,4]}}\n // this is to make it easier to work with in the table component\n // currently only supports one level of nesting\n // also puts original into subRows for dropdown viewing\n const tempResponse = response.data[\n `${args?.indexPrefix ?? ''}${args.type}`\n ].map((item: Record<string, any>) => {\n const tempItem = item;\n for (let i = 0; i < containsDotsUniqueBase.length; i++) {\n const basePart = containsDotsUniqueBase[i];\n if (item[basePart] && Array.isArray(item[basePart])) {\n // move original to subRows\n tempItem.subRows = tempItem[basePart];\n\n tempItem[basePart] = tempItem[basePart].reduce(\n (acc: Record<string, any>, obj: Record<string, any>) => {\n for (const key in obj) {\n if (Object.hasOwn(obj, key)) {\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(obj[key]);\n }\n }\n return acc;\n },\n {},\n );\n }\n }\n return tempItem;\n });\n\n return {\n data: {\n _aggregation: response.data._aggregation,\n [`${args?.indexPrefix ?? ''}${args.type}`]: tempResponse,\n },\n };\n }\n return response;\n },\n providesTags: ['RAW_DATA', 'TABLE_DATA'],\n }),\n getAggs: builder.query<AggregationsData, QueryAggsParams>({\n query: ({\n type,\n fields,\n filters,\n accessibility = Accessibility.ALL,\n filterSelf = false,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryAggsParams) => {\n return buildGetAggregationQuery(\n type,\n fields,\n filters,\n accessibility,\n filterSelf,\n undefined,\n indexPrefix,\n filterName,\n );\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n const buckets = processHistogramResponse<AggregationsData>(\n response?.data?.[`${args?.indexPrefix ?? ''}_aggregation`][\n args.type\n ] ?? {},\n );\n\n // check for totals\n const count =\n response?.data?.[`${args?.indexPrefix ?? ''}_aggregation`][args.type]\n ?._totalCount ?? null;\n\n return {\n _totalCount: [{ key: args.type, count }], // add total count to allow cohorts to cache index item totals\n ...buckets,\n };\n },\n providesTags: ['AGGS'],\n }),\n getStatsAggregations: builder.query<StatsData, QueryAggsParams>({\n query: ({\n type,\n fields,\n filters,\n accessibility = Accessibility.ALL,\n filterSelf = false,\n queryId = undefined,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryAggsParams) => {\n return buildGetStatsAggregationQuery(\n type,\n fields,\n filters,\n accessibility,\n filterSelf,\n queryId,\n indexPrefix,\n filterName,\n );\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return processHistogramResponse<StatsData>(\n response?.data?.[`${args?.indexPrefix ?? ''}_aggregation`][\n args.type\n ] ?? {},\n );\n },\n providesTags: ['STATS'],\n }),\n getSubAggs: builder.query<AggregationsData, QueryForSubAggsParams>({\n query: ({\n type,\n mainField,\n termsFields = undefined,\n missingFields = undefined,\n numericAggAsText = false,\n filters = undefined,\n accessibility = Accessibility.ALL,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryForSubAggsParams) => {\n const nestedAggFields = {\n termsFields: termsFields,\n missingFields: missingFields,\n };\n\n const query = `query getSubAggs ( ${\n filters ?? `$${filterName}: JSON,`\n } $nestedAggFields: JSON) {\n ${indexPrefix}_aggregation {\n ${type} ( ${\n filters ?? `filter: $${filterName}, filterSelf: false,`\n } nestedAggFields: $nestedAggFields, accessibility: ${accessibility}) {\n _totalCounts\n ${nestedHistogramQueryStrForEachField(mainField, numericAggAsText)}\n }`;\n\n return {\n query: query,\n variables: {\n ...(filters && {\n [filterName]: convertFilterSetToGqlFilter(filters),\n }),\n nestedAggFields: nestedAggFields,\n },\n };\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return processHistogramResponse<AggregationsData>(\n response?.data?.[`${args?.indexPrefix ?? ''}_aggregation`][\n args.type\n ] ?? {},\n );\n },\n providesTags: ['AGGS'],\n }),\n\n getCounts: builder.query<number, QueryCountsParams>({\n query: ({\n type,\n filters,\n accessibility = Accessibility.ALL,\n queryId = undefined,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryCountsParams) => {\n const gqlFilters = convertFilterSetToGqlFilter(filters);\n const queryLine = `query totalCounts${queryId ? `${indexPrefix}_${queryId}` : ''} ${\n gqlFilters ? `($${filterName}: JSON)` : ''\n }{`;\n const typeAggsLine = `${type} ${\n gqlFilters ? `(filter: $${filterName}, ` : '('\n } accessibility: ${accessibility}) {`;\n\n const query = `${queryLine} ${indexPrefix}_aggregation {\n ${typeAggsLine}\n _totalCount\n }\n }\n }`;\n return {\n query: query,\n variables: {\n ...(gqlFilters && {\n [filterName]: gqlFilters,\n }),\n },\n validateStatus: (response: Record<string, any>) => {\n if (response?.errors && response.errors?.length > 0) return false;\n if (\n !response.data ||\n !response.data[`${indexPrefix ?? ''}_aggregation`]\n ) {\n return false;\n }\n if (!(type in response.data[`${indexPrefix ?? ''}_aggregation`])) {\n return false;\n }\n return true;\n },\n };\n },\n transformResponse: (\n response: Record<string, any>,\n _meta,\n args,\n ): number => {\n return (\n response?.data[`${args?.indexPrefix ?? ''}_aggregation`][args.type]\n ?._totalCount ?? 0\n );\n },\n providesTags: ['COUNTS'],\n }),\n getFieldCountSummary: builder.query<\n Record<string, any>,\n QueryForFileCountSummaryParams\n >({\n query: ({\n type,\n field,\n filters,\n accessibility = Accessibility.ALL,\n indexPrefix = '',\n filterName = 'filter',\n }: QueryForFileCountSummaryParams) => {\n const gqlFilters = convertFilterSetToGqlFilter(filters);\n const query = `query summary ($${filterName}: JSON) {\n ${indexPrefix}_aggregation {\n ${type} (filter: $${filterName}, accessibility: ${accessibility}) {\n ${field} {\n histogram {\n sum,\n }\n }\n }\n }\n }`;\n return {\n query: query,\n variables: {\n ...(gqlFilters && {\n [filterName]: gqlFilters,\n }),\n },\n };\n },\n }),\n getFieldsForIndex: builder.query({\n query: ({\n index,\n indexPrefix = '',\n }: {\n index: string;\n indexPrefix: string | undefined;\n }) => {\n return {\n query: `{\n ${indexPrefix}_mapping { ${index} }\n }`,\n };\n },\n transformResponse: (response: Record<string, any>, _meta, args) => {\n return response[`${args?.indexPrefix ?? ''}_mapping`];\n },\n }),\n getSharedFieldsForIndex: builder.query<SharedFieldMapping, string[]>({\n query: (indices: string[]) => {\n return {\n query: `{\n _mapping { ${indices.join(' ')} }\n }`,\n };\n },\n transformResponse: (response: Record<string, any>) => {\n if ('_mapping' in response.data) {\n return groupSharedFields(response.data['_mapping']);\n }\n return {};\n },\n }),\n customRange: builder.query<AggregationsData, RangeQueryRequest>({\n query: ({\n filters,\n field,\n ranges,\n rangeBaseName,\n index,\n indexPrefix,\n accessibility = Accessibility.ALL,\n isNested = true,\n asTextHistogram = false,\n }: RangeQueryRequest) => {\n // remove field from FilterSet\n\n const queryData = buildRangeQuery(\n field,\n ranges,\n filters,\n rangeBaseName,\n index,\n indexPrefix,\n isNested,\n asTextHistogram,\n );\n\n const gqlFilters = Object.entries(queryData.filters).reduce(\n (acc: Record<string, GQLFilter>, [key, filter]) => {\n acc[key] = isNested\n ? convertFilterSetToNestedGqlFilter(filter)\n : convertFilterSetToGqlFilter(filter);\n return acc;\n },\n {},\n );\n return {\n query: queryData.query,\n variables: {\n accessibility,\n ...gqlFilters,\n },\n };\n },\n }),\n generalGQL: builder.query<Record<string, unknown>, guppyApiSliceRequest>({\n query: ({ query, variables }) => {\n return {\n query: query,\n variables: variables,\n };\n },\n }),\n }),\n});\n\nexport const useGetArrayTypes = () => {\n {\n const { data, error } = useGetStatus();\n if (error) {\n return {};\n }\n return data ? data['indices'] : {};\n }\n};\n\nexport const useGetIndexFields = (index: string, indexPrefix = '') => {\n const { data } = useGetFieldsForIndexQuery({\n index: index,\n indexPrefix: indexPrefix,\n });\n return data ?? [];\n};\n\nexport const buildGetAggregationQuery = (\n type: string,\n fields: ReadonlyArray<string>,\n filters: FilterSet,\n accessibility = Accessibility.ALL,\n filterSelf: boolean = false,\n queryId: string | undefined = undefined,\n indexPrefix: string = '',\n filterName: string = 'filter',\n): GraphQLQuery => {\n const queryStart = isFilterEmpty(filters)\n ? `query getAggs${queryId ? `_${queryId}` : ''} {\n ${indexPrefix}_aggregation {\n ${type} (accessibility: ${accessibility}) {`\n : `query getAggs ($${filterName}: JSON) {\n ${indexPrefix}_aggregation {\n ${type} (filter: $${filterName}, filterSelf: ${filterSelf ? 'true' : 'false'}, accessibility: ${accessibility}) { _totalCount`;\n const query = `${queryStart}\n ${fields.map((field: string) =>\n histogramQueryStrForEachField(field),\n )}\n }\n }\n }`;\n const queryBody: GraphQLQuery = {\n query: query,\n variables: { [filterName]: convertFilterSetToGqlFilter(filters) },\n };\n\n return queryBody;\n};\n\nexport const buildGetStatsAggregationQuery = (\n type: string,\n fields: ReadonlyArray<string>,\n filters: FilterSet,\n accessibility = Accessibility.ALL,\n filterSelf: boolean = false,\n queryId: string | undefined = undefined,\n indexPrefix: string = '',\n filterName: string = 'filter',\n): GraphQLQuery => {\n const queryStart = isFilterEmpty(filters)\n ? `\n query getStatsAggs${queryId ? `_${queryId}` : ''} {\n ${indexPrefix}_aggregation {\n ${type} (accessibility: ${accessibility}) {`\n : `query getStatsAggs${queryId ? `_${queryId}` : ''} ($${filterName}: JSON) {\n ${indexPrefix}_aggregation {\n ${type} (filter: $${filterName}, filterSelf: ${filterSelf ? 'true' : 'false'}, accessibility: ${accessibility}) { _totalCount`;\n const query = `${queryStart}\n ${fields.map((field: string) =>\n statsQueryStrForEachField(field),\n )}\n }\n }\n }`;\n const queryBody: GraphQLQuery = {\n query: query,\n variables: { [filterName]: convertFilterSetToGqlFilter(filters) },\n };\n\n return queryBody;\n};\n\nexport const {\n useGetRawDataAndTotalCountsQuery,\n useGetAccessibleDataQuery,\n useGetAllFieldsForTypeQuery,\n useGetAggsQuery,\n useLazyGetAggsQuery,\n useGetStatsAggregationsQuery,\n useLazyGetStatsAggregationsQuery,\n useGetSubAggsQuery,\n useGetCountsQuery,\n useLazyGetCountsQuery,\n useGetFieldCountSummaryQuery,\n useGetFieldsForIndexQuery,\n useGetSharedFieldsForIndexQuery,\n useGeneralGQLQuery,\n useLazyGeneralGQLQuery,\n useCustomRangeQuery,\n useLazyCustomRangeQuery,\n} = explorerApi;\n","import type { PayloadAction, TypedStartListening } from '@reduxjs/toolkit';\nimport { createListenerMiddleware, isAnyOf } from '@reduxjs/toolkit';\nimport { CoreDispatch } from './store';\nimport { CoreState } from './reducers';\n\nimport { updateCohortIndexCountById } from './features/cohort/cohortManagerSlice';\n\nimport { explorerApi } from './features/guppy/guppySlice';\n\n/**\n * Defines coreListeners for adding middleware.\n * used to update the current Cohort Case count\n */\n\nexport const coreStoreListenerMiddleware = createListenerMiddleware();\nexport type CoreStartListening = TypedStartListening<CoreState, CoreDispatch>;\n\nexport const startCoreListening =\n coreStoreListenerMiddleware.startListening as CoreStartListening;\n\n/**\n * When a getCounts is requested, it might be for a cohort.\n * If so, then update the cohort's counts for that index\n */\nstartCoreListening({\n matcher: isAnyOf(explorerApi.endpoints.getCounts.matchFulfilled),\n effect: async (\n action: PayloadAction<number, string, Record<any, any>>,\n listenerApi,\n ) => {\n const counts = action.payload;\n const index = action?.meta?.arg?.originalArgs?.type; // note this is the guppy index name\n const cohortId = action?.meta?.arg?.originalArgs?.queryId;\n if (cohortId && index) {\n listenerApi.dispatch(\n updateCohortIndexCountById({ index, cohortId, counts }),\n );\n }\n },\n});\n","/* eslint @typescript-eslint/no-unused-vars: 0 */\n// Credit to: https://github.com/vercel/next.js/discussions/15687\nimport createWebStorage from 'redux-persist/lib/storage/createWebStorage';\n\nconst createNoopStorage = () => {\n return {\n getItem(_key: string) {\n return Promise.resolve(null);\n },\n setItem(_key: string, value: string) {\n return Promise.resolve(value);\n },\n removeItem(_key: string) {\n return Promise.resolve();\n },\n };\n};\n\nconst storage =\n typeof window !== 'undefined'\n ? createWebStorage('local')\n : createNoopStorage();\n\nexport const sessionStorage =\n typeof window !== 'undefined'\n ? createWebStorage('session')\n : createNoopStorage();\n\nexport default storage;\n","import { GEN3_AUTHZ_API, GEN3_AUTHZ_SERVICE } from '../../constants';\nimport { AuthzResourceResponse } from './types';\n\n/**\n * Low-level helper to fetch Arborist resources for the current user.\n * Adds an Authorization header when a token is provided and normalizes the response\n * to a simple string[] of resource paths.\n *\n * token { string | null } - access token to use for authorization\n * useService { boolean } - use the arborist service endpoint instead of the public arborist API\n */\nexport async function fetchArboristResources(\n token: string | null,\n useService: boolean = false,\n): Promise<string[]> {\n const headers: Record<string, string> = {};\n\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n const url = useService\n ? `${GEN3_AUTHZ_SERVICE}/resource`\n : `${GEN3_AUTHZ_API}/resources`;\n const res = await fetch(url, { headers });\n\n if (!res.ok) {\n console.error(\n '@gen3/core:fetchArboristResources /resource failed:',\n res.status,\n await res.text(),\n );\n return [];\n }\n\n const data = (await res.json()) as AuthzResourceResponse;\n return data.resources ?? [];\n}\n","import { configureStore } from '@reduxjs/toolkit';\nimport { setupListeners } from '@reduxjs/toolkit/query';\nimport { CoreState, rootReducer } from './reducers';\nimport { gen3ServicesReducerMiddleware } from './features/gen3/gen3Api';\nimport { guppyAPISliceMiddleware } from './features/guppy/guppyApi';\nimport { userAuthApiMiddleware } from './features/user/userSliceRTK';\nimport { coreStoreListenerMiddleware } from './listeners';\nimport type { PersistConfig, PersistState } from 'redux-persist';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n persistReducer,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\n\nimport type { Action, Reducer } from 'redux';\nimport storage from './storage-persist';\nimport { GEN3_COMMONS_NAME } from './server';\n\n/**\n * Update declaration of persistReducer to support redux v5\n */\ndeclare module 'redux-persist' {\n export function persistReducer<S, A extends Action = Action, P = S>(\n config: PersistConfig<S>,\n baseReducer: Reducer<S, A, P>,\n ): Reducer<\n S & { _persist: PersistState },\n A,\n P & { _persist?: PersistState }\n >;\n}\n\nconst persistConfig = {\n key: `${GEN3_COMMONS_NAME}-root`, // stored by domain name but name added for development using localhost which will share store across multiple configurations\n version: 1,\n storage,\n whitelist: ['cohorts', 'activeWorkspace', 'cart'],\n};\n\nconst persistedReducer = persistReducer(persistConfig, rootReducer);\n\nexport const setupCoreStore = (preloadedState?: Partial<CoreState>) =>\n configureStore({\n reducer: persistedReducer,\n preloadedState,\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\n },\n })\n .concat(\n gen3ServicesReducerMiddleware,\n guppyAPISliceMiddleware,\n userAuthApiMiddleware,\n )\n .prepend(coreStoreListenerMiddleware.middleware), // needs to be prepended,\n });\n\nexport const coreStore = setupCoreStore();\n\nsetupListeners(coreStore.dispatch);\n\nexport type CoreDispatch = typeof coreStore.dispatch;\n\nexport type CoreStore = typeof coreStore;\n","import React, { PropsWithChildren } from 'react';\nimport { Provider } from 'react-redux';\nimport { coreStore } from './store';\nimport { persistStore } from 'redux-persist';\nimport { PersistGate } from 'redux-persist/integration/react';\n\nconst persistor = persistStore(coreStore);\n\nexport const CoreProvider: React.FC<Record<string, unknown>> = ({\n children,\n}: PropsWithChildren) => {\n return (\n <Provider store={coreStore}>\n <PersistGate loading={null} persistor={persistor}>\n {children}\n </PersistGate>\n </Provider>\n );\n};\n","import { useEffect, useRef } from 'react';\nimport { useCoreDispatch, useCoreSelector } from './hooks';\nimport { CoreState } from './reducers';\nimport { isEqual } from 'lodash';\n\nexport type UnknownJson = Record<string, unknown>;\n\nexport type DataStatus = 'uninitialized' | 'pending' | 'fulfilled' | 'rejected';\n\nexport interface Gen3Response<H = UnknownJson> {\n readonly data: H;\n readonly warnings?: Record<string, string>;\n readonly errors?: Record<string, string>;\n}\n\nexport interface UseCoreDataResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\nexport interface CoreDataSelectorResponse<T, S = DataStatus> {\n readonly data?: T;\n readonly status: S;\n readonly error?: string;\n}\n\nexport interface CoreDataSelector<T> {\n (state: CoreState): CoreDataSelectorResponse<T>;\n}\n\nexport interface FetchDataActionCreator<P, A> {\n (...params: P[]): A;\n}\n\nexport interface UseCoreDataHook<P, T> {\n (...params: P[]): UseCoreDataResponse<T>;\n}\n\nexport const usePrevious = <T>(value: T): T | undefined => {\n const ref = useRef<T>();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n};\n\nexport const createUseCoreDataHook = <P, A, T>(\n fetchDataActionCreator: FetchDataActionCreator<P, A>,\n dataSelector: CoreDataSelector<T>,\n): UseCoreDataHook<P, T> => {\n return (...params: P[]) => {\n const coreDispatch = useCoreDispatch();\n const { data, status, error } = useCoreSelector(dataSelector);\n const action = fetchDataActionCreator(...params);\n const prevParams = usePrevious<P[]>(params);\n\n useEffect(() => {\n if (status === 'uninitialized' || !isEqual(prevParams, params)) {\n // createDispatchHook types forces the input to AnyAction, which is\n // not compatible with thunk actions. hence, the `as any` cast. ;(\n coreDispatch(action as any); // eslint-disable-line\n }\n }, [status, coreDispatch, action, params, prevParams]);\n\n return {\n data,\n error,\n isUninitialized: status === 'uninitialized',\n isFetching: status === 'pending',\n isSuccess: status === 'fulfilled',\n isError: status === 'rejected',\n };\n };\n};\n\nexport interface CoreDataValueSelector<T> {\n (state: CoreState): T;\n}\n","import { GEN3_AI_SEARCH_API } from '../../constants';\nimport { gen3Api } from '../gen3';\n\ninterface AiSearchParams {\n readonly query: string;\n}\n\ninterface AiSearchRequestParams extends AiSearchParams {\n readonly topic?: string;\n readonly conversationId?: string;\n}\n\nexport interface AiSearchResponse extends AiSearchParams {\n readonly topic: string;\n readonly conversationId: string;\n readonly response: string;\n readonly documents: {\n readonly page_content: string;\n readonly metadata: {\n readonly row: number;\n readonly source: string;\n };\n }[];\n}\n\n/**\n * returns a response from the AI search service\n * @param searchParams - the parameters for the AI search service\n * @returns the response from the AI search service\n */\nexport const aiSearchApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n askQuestion: builder.mutation<AiSearchResponse, AiSearchRequestParams>({\n query: (searchParams: AiSearchRequestParams) => ({\n url: `${GEN3_AI_SEARCH_API}/ask`,\n method: 'POST',\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: searchParams.query,\n ...(searchParams.topic ? { topic: searchParams.topic } : {}),\n ...(searchParams.conversationId ? { conversation_id: searchParams.conversationId } : {}),\n }),\n }),\n transformResponse: (data: Record<string, any>, _, arg) => {\n return {\n query: arg.query,\n response: data.response,\n topic: data.topic,\n conversationId: data.conversation_id,\n documents: data.documents,\n };\n },\n }),\n /**\n * returns the status of the AI search service\n * @returns {\n * status: string\n * timestamp: string\n * }\n */\n getAISearchStatus: builder.query<AiSearchResponse, void>({\n query: () => `${GEN3_AI_SEARCH_API}/_status`,\n }),\n getAISearchVersion: builder.query<AiSearchResponse, void>({\n query: () => `${GEN3_AI_SEARCH_API}/_version`,\n }),\n })\n});\n\n// Add more endpoints here\n\nexport const {\n useAskQuestionMutation,\n useGetAISearchStatusQuery,\n useGetAISearchVersionQuery\n} = aiSearchApi;\n","import { gen3Api } from '../gen3';\nimport { createSelector } from '@reduxjs/toolkit';\nimport {\n type AuthzMapping,\n AuthzResourceResponse,\n CreateAuthzResourceRequest,\n CreateAuthzResourceResponse,\n} from './types';\nimport { GEN3_AUTHZ_API } from '../../constants';\n\nconst TAGS = 'authz';\n\nexport const authzTags = gen3Api.enhanceEndpoints({\n addTagTypes: [TAGS],\n});\n\n/**\n * Creates the authzApi for checking arborist permissions for a selected user\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/arborist/master/docs/openapi.yaml#/auth/get_auth_mapping\n * @see https://github.com/uc-cdis/arborist/blob/master/docs/relationships.simplified.png\n * @returns: An arborist response dict of user permissions {method, service} for each resource path.\n */\nexport const authzApi = authzTags.injectEndpoints({\n endpoints: (builder) => ({\n getAuthzMappings: builder.query<AuthzMapping, void>({\n query: () => `${GEN3_AUTHZ_API}/mapping`,\n }),\n getAuthzResources: builder.query<AuthzResourceResponse, void>({\n query: () => ({\n url: `${GEN3_AUTHZ_API}/resources`,\n method: 'GET',\n }),\n }),\n createAuthzResource: builder.mutation<\n CreateAuthzResourceResponse,\n CreateAuthzResourceRequest\n >({\n query: (request) => ({\n url: `${GEN3_AUTHZ_API}/resources`,\n method: 'POST',\n body: request.data,\n }),\n invalidatesTags: [TAGS],\n }),\n }),\n});\n\nexport const {\n useGetAuthzMappingsQuery,\n useLazyGetAuthzMappingsQuery,\n useGetAuthzResourcesQuery,\n useLazyGetAuthzResourcesQuery,\n useCreateAuthzResourceMutation,\n} = authzApi;\n\nexport const selectAuthzMapping = authzApi.endpoints.getAuthzMappings.select();\n\nexport const selectAuthzMappingData = createSelector(\n selectAuthzMapping,\n (authzMapping) => authzMapping?.data ?? { mappings: [] },\n);\n","import { IDBPDatabase, openDB } from 'idb';\nimport { StorageOperationResults } from '../../../types';\nimport { getTimestamp } from '../../../utils';\nimport { StorageEntity } from '../types';\n\nexport interface CohortStorageReturnStatus<T> extends StorageOperationResults {\n data?: T;\n}\n\nexport interface CohortStorageConfig {\n databaseName: string;\n storeName: string;\n schemaVersion?: number;\n}\n\nexport class CohortStorage<\n T extends StorageEntity<K>,\n K extends string | number = string,\n> {\n private readonly databaseName: string;\n private readonly storeName: string;\n private readonly schemaVersion: number;\n\n constructor(config: CohortStorageConfig) {\n this.databaseName = config.databaseName;\n this.storeName = config.storeName;\n this.schemaVersion = config.schemaVersion || 1;\n }\n\n private getDb(): Promise<IDBPDatabase> {\n try {\n const storeName = this.storeName;\n return openDB(this.databaseName, this.schemaVersion, {\n upgrade(db) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName, { keyPath: 'id' });\n }\n },\n });\n } catch (error: unknown) {\n let errorMessage = 'Unknown error';\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n throw new Error(`Database initialization failed: ${errorMessage}`);\n }\n }\n\n // ===== CREATE OPERATIONS =====\n\n /**\n * Save a single cohort to the database\n */\n async saveCohort(cohort: T): Promise<StorageOperationResults> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readwrite');\n tx.objectStore(this.storeName).put(cohort);\n await tx.done;\n return { status: 200, message: 'cohort added' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 500, message: 'unable to save cohort' };\n }\n }\n\n /**\n * Save multiple cohorts in a single transaction (bulk operation)\n */\n async saveCohorts(cohorts: T[]): Promise<StorageOperationResults> {\n if (cohorts.length === 0)\n return {\n isError: true,\n status: 400,\n message: 'cannot add an empty array',\n };\n\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readwrite');\n\n // Batch all operations in a single transaction for better performance\n await Promise.all([\n ...cohorts.map((cohort) => tx.store.put({ ...cohort, saved: true })),\n tx.done,\n ]);\n return { status: 200, message: 'cohorts added' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 500, message: 'unable to save cohort' };\n }\n }\n\n // ===== READ OPERATIONS =====\n\n /**\n * Get a specific cohort by ID\n */\n async getCohort(id: K): Promise<CohortStorageReturnStatus<T>> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n const cohort = (await store.get(id)) satisfies T;\n return {\n status: 200,\n message: 'success',\n data: cohort,\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return {\n isError: true,\n status: 401,\n message: `cannot find cohort ${id}`,\n };\n }\n }\n\n /**\n * Get all cohorts from the database\n */\n async getAllCohorts(): Promise<CohortStorageReturnStatus<Record<K, T>>> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n\n const savedCohorts =\n (await store.getAll()) satisfies Array<T> as Array<T>;\n if (!savedCohorts) {\n return {\n isError: true,\n status: 500,\n message: 'no cohorts returned',\n };\n }\n const cohorts = savedCohorts.reduce(\n (acc: Record<K, T>, cohort) => {\n const { id } = cohort;\n acc[id] = cohort;\n return acc;\n },\n {} as Record<K, T>,\n );\n return {\n status: 200,\n message: 'success',\n data: cohorts,\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 401, message: 'cannot return cohorts' };\n }\n }\n\n /**\n * Search cohorts by name (case-insensitive partial match)\n */\n async searchCohortsByName(\n searchTerm: string,\n ): Promise<CohortStorageReturnStatus<Record<K, T>>> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readonly');\n const store = tx.objectStore(this.storeName);\n const allCohorts = (await store.getAll(\n this.storeName,\n )) satisfies Array<T> as Array<T>;\n\n // Filter in memory for partial name matching\n const searchLower = searchTerm.toLowerCase();\n return {\n status: 200,\n message: 'success',\n data: allCohorts\n .filter((cohort) => cohort.name.toLowerCase().includes(searchLower))\n .reduce(\n (acc: Record<K, T>, cohort) => {\n const { id } = cohort;\n acc[id] = cohort;\n return acc;\n },\n {} as Record<K, T>,\n ),\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 401, message: 'cannot find cohorts' };\n }\n }\n\n /**\n * Count total number of cohorts\n */\n async getCohortCount(): Promise<CohortStorageReturnStatus<number>> {\n try {\n const db = await this.getDb();\n const total = await db.count(this.storeName);\n return {\n status: 200,\n message: 'success',\n data: total,\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return {\n isError: true,\n status: 401,\n message: 'cannot find cohort count',\n };\n }\n }\n\n // ===== UPDATE OPERATIONS =====\n\n /**\n * Update an existing cohort (full replacement)\n */\n async updateCohort(cohort: T): Promise<StorageOperationResults> {\n try {\n const db = await this.getDb();\n\n // Verify cohort exists before updating\n const tx = db.transaction(this.storeName, 'readwrite');\n const store = tx.objectStore(this.storeName);\n const existing = await store.get(cohort.id);\n if (!existing) {\n return {\n isError: true,\n status: 401,\n message: 'cohort not found',\n };\n }\n\n const timestamp = getTimestamp();\n const updated = {\n ...existing,\n modifiedDatetime: timestamp,\n };\n\n store.put(updated);\n await tx.done;\n return { status: 200, message: 'success' };\n } catch (error: unknown) {\n let errorMessage = 'An unknown error occurred';\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n return {\n isError: true,\n status: 500,\n message: `Unable to update cohort: ${cohort.id}. Error: ${errorMessage}`,\n };\n }\n }\n\n // ===== DELETE OPERATIONS =====\n\n /**\n * Delete a specific cohort by ID\n */\n async deleteCohort(id: K): Promise<StorageOperationResults> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readwrite');\n const store = tx.objectStore(this.storeName);\n // Verify cohort exists before deleting\n const existing = await db.get(this.storeName, id);\n if (!existing) {\n return {\n isError: true,\n status: 401,\n message: 'cohort not found',\n };\n }\n\n store.delete(id);\n await tx.done;\n return { status: 200, message: `${id} deleted` };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable to delete cohort: ${id}. Error: ${errorMessage}`,\n };\n }\n }\n\n /**\n * Delete all cohorts from the database\n */\n async deleteAllCohorts(): Promise<StorageOperationResults> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(this.storeName, 'readwrite');\n const store = tx.objectStore(this.storeName);\n store.clear();\n await tx.done;\n return { status: 200, message: `all cohorts deleted` };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable to delete all cohorts. Error: ${errorMessage}`,\n };\n }\n }\n\n // ===== UTILITY OPERATIONS =====\n\n /**\n * Check if a cohort exists\n */\n async cohortExists(id: K): Promise<CohortStorageReturnStatus<boolean>> {\n try {\n const db = await this.getDb();\n // Verify cohort exists before deleting\n const existing = await db.get(this.storeName, id);\n return { status: 200, message: `${id}: ${existing ? 'true' : 'false'}` };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable search for cohort. Error: ${errorMessage}`,\n };\n }\n }\n\n /**\n * Export all cohorts as JSON\n */\n async exportCohorts(): Promise<CohortStorageReturnStatus<Record<K, T>>> {\n return await this.getAllCohorts();\n }\n\n /**\n * Import cohorts from JSON data\n */\n async importCohorts(\n cohorts: T[],\n overwrite: boolean = false,\n ): Promise<void | CohortStorageReturnStatus<T>> {\n try {\n if (overwrite) {\n await this.deleteAllCohorts();\n }\n await this.saveCohorts(cohorts);\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Failed to import cohorts: ${errorMessage}`,\n };\n }\n }\n\n /**\n * Close the database connection\n */\n async close(): Promise<void> {\n try {\n const db = await this.getDb();\n db.close();\n } catch (error) {\n console.error('Failed to close database:', error);\n }\n }\n}\n","import { JSONObject } from '../../types';\n\n// represents the auth access control for a DataList\nexport interface AuthZAccess {\n version: number;\n authz: string[];\n}\n\n// Possible values of an Item: File, Additional Value, Cohort\nexport type ItemValue =\n | string\n | number\n | undefined\n | Record<string, any>\n | boolean;\n\n// Object representing an Item with its type\nexport interface ListItem {\n itemType: 'Data' | 'AdditionalData' | 'Gen3GraphQL';\n [k: string]: ItemValue;\n}\n\n/**\n * A Data item: at the minimum it will have a guid and an item type\n */\n\nexport interface FileItem extends ListItem {\n id: string; // TODO: remove id or guid\n guid?: string;\n name?: string;\n description?: string;\n type?: string;\n size?: string;\n md5sum?: string;\n url?: string;\n documentationUrl?: string;\n itemType: 'Data';\n dataset_guid?: string;\n}\n\nexport interface FileItemAPI extends Omit<FileItem, 'id'> {\n display_name?: string;\n}\n\nexport interface CohortItem extends ListItem {\n itemType: 'Gen3GraphQL';\n data: JSONObject;\n name: string;\n schemaVersion: string;\n id: string;\n}\n\nexport interface AdditionalDataItem extends ListItem {\n description?: string;\n documentationUrl?: string;\n url?: string;\n itemType: 'AdditionalData';\n name: string;\n dataset_guid?: string;\n}\n\nexport const isFileItem = (item: ListItem): item is FileItem => {\n return item && 'guid' in item;\n};\n\nexport const isAdditionalDataItem = (item: any): item is AdditionalDataItem => {\n return (item as AdditionalDataItem).itemType === 'AdditionalData'; // TODO resolve this with type from the api\n};\n\n// Type guard for CohortItem\nexport const isCohortItem = (item: any): item is CohortItem => {\n return (\n item &&\n 'data' in item &&\n 'schemaVersion' in item &&\n item.itemType === 'Gen3GraphQL'\n );\n};\n\n// Type guard for DatalistAPI\nexport const isDatalistAPI = (value: unknown): value is DatalistAPI => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n\n const data = value as Partial<DatalistAPI>;\n\n // Check required properties in DataItemBaseData\n if (\n typeof data.name !== 'string' ||\n typeof data.created_time !== 'string' ||\n typeof data.updated_time !== 'string' ||\n typeof data.version !== 'number' ||\n typeof data.authz !== 'object' ||\n data.authz === null ||\n !Array.isArray(data.authz.authz)\n ) {\n return false;\n }\n\n // Check required properties in DatalistAsItems\n if (\n typeof data.items !== 'object' ||\n data.items === null ||\n typeof (data.items as Record<string, unknown>) !== 'object'\n ) {\n return false;\n }\n\n return true;\n};\n\nexport type DataSetMembers = Record<string, FileItem | AdditionalDataItem>;\n\n/**\n * Represents a DataSet which is created by grouping File\n * objects with the same dataset_guids\n */\nexport interface DataLibraryDataset {\n id: string;\n name?: string;\n members: DataSetMembers; // Files and Additional Information\n itemType: 'Dataset';\n}\n\nexport type DatasetOrCohort = Record<string, DataLibraryDataset | CohortItem>;\n\nexport type LibraryListItemsAPI = Record<\n string,\n FileItemAPI | AdditionalDataItem | CohortItem\n>;\n\nexport interface DatalistBase {\n name: string;\n created_time: string;\n updated_time: string;\n authz: AuthZAccess;\n version: number;\n}\n\nexport interface DatalistAsAPIItems {\n name: string;\n items: LibraryListItemsAPI;\n}\n\nexport interface LibraryListItemsGroupedByDataset {\n name: string;\n items: DatasetOrCohort; // a record of datasets and cohorts\n}\n\nexport interface DataListUpdate extends LibraryListItemsGroupedByDataset {\n id: string;\n}\n\nexport type Datalist = DatalistBase &\n LibraryListItemsGroupedByDataset & { id: string };\nexport type DatalistAPI = DatalistBase & DatalistAsAPIItems;\nexport type DatalistWithIdAPI = DatalistAPI & { id: string };\n// DataLibrary has been combined into data sets using BuildList\nexport type DataLibrary = Record<string, Datalist>;\n\n// Data Library as represented in the Storage API\nexport type DataLibraryAPI = Record<string, DatalistAPI>;\n\nexport type DataLibraryAPIResponse = {\n lists: DataLibraryAPI;\n};\n\n/**\n * Type guard for DataLibraryAPIResponse\n */\nexport const isDataLibraryAPIResponse = (\n obj: unknown,\n): obj is DataLibraryAPIResponse => {\n return (\n typeof obj === 'object' &&\n obj !== null &&\n 'lists' in obj &&\n typeof (obj as DataLibraryAPIResponse).lists === 'object'\n );\n};\n\nexport interface UpdateDataLibraryListParams extends DatalistAsAPIItems {\n id: string;\n}\n\nexport enum DataLibraryStoreMode {\n ApiOnly = 'apiOnly',\n ApiAndLocal = 'apiAndLocal',\n LocalOnly = 'localOnly',\n}\n\nexport interface ExportDatasetFields {\n dataObjectField: string; // member that stores the id of the object that stores the id.\n datasetIdField: string; // member that stores the id of the \"dataset\" will default to uid\n dataObjectIdField: string; // field in data object\n dataObjectNameField?: string;\n dataObjectSizeField?: string;\n dataObjectMd5sumField?: string;\n dataObjectUrlField?: string;\n dataObjectFileTypeValue?: string;\n dataObjectFileTypeField?: string;\n}\n","import {\n AdditionalDataItem,\n CohortItem,\n DataLibrary,\n DataLibraryAPI,\n DataLibraryAPIResponse,\n DataLibraryDataset,\n Datalist,\n DatalistAPI,\n DataSetMembers,\n DatasetOrCohort,\n ExportDatasetFields,\n FileItem,\n FileItemAPI,\n isCohortItem,\n isFileItem,\n LibraryListItemsAPI,\n LibraryListItemsGroupedByDataset,\n} from './types';\nimport { parse } from 'graphql';\nimport { JSONObject } from '../../types/';\n\nconst processItem = (id: string, data: any) => {\n if (data?.type === 'AdditionalData') {\n return {\n name: data.name,\n itemType: 'AdditionalData',\n description: data?.description,\n documentationUrl: data?.documentationUrl as string,\n url: data?.url as string,\n } as AdditionalDataItem;\n }\n\n return {\n ...data,\n itemType: 'Data',\n guid: data.id,\n id: id, // TODO fix this hack\n };\n};\n\nexport const buildListItemsGroupedByDataset = (\n listData: LibraryListItemsAPI,\n): DatasetOrCohort => {\n const items: DatasetOrCohort = Object.entries(listData).reduce(\n (acc: DatasetOrCohort, [id, data]) => {\n if (data?.type === 'Gen3GraphQL') {\n const cohortData = data as CohortItem;\n acc[id] = {\n itemType: 'Gen3GraphQL',\n id: data.guid,\n schemaVersion: cohortData.schema_version,\n data: cohortData.data,\n name: data.name,\n index: cohortData.index,\n } as CohortItem;\n } else {\n // Dataset\n if (!(data?.dataset_guid && (data.dataset_guid as string) in acc)) {\n acc[data.dataset_guid as string] = {\n id: data.dataset_guid as string,\n name: '',\n members: { [id]: processItem(id, data) },\n } as DataLibraryDataset;\n } else {\n (acc[data.dataset_guid as string].members as DataSetMembers)[id] =\n processItem(id, data);\n }\n }\n return acc;\n },\n {},\n );\n\n return items;\n};\n\nexport const BuildList = (\n listId: string,\n listData: DatalistAPI,\n): Datalist | undefined => {\n if (!Object.keys(listData).includes('items')) return undefined;\n\n const items = buildListItemsGroupedByDataset(listData?.items ?? {});\n\n return {\n items: items,\n version: listData?.version ?? 0,\n created_time: listData?.created_time,\n updated_time: listData?.updated_time,\n name: listData?.name ?? listId,\n id: listId,\n authz: listData?.authz,\n };\n};\n\n/**\n * Constructs a `DataLibrary` object by transforming the input `DataLibraryAPIResponse`.\n *\n * This function takes an API response containing lists and processes each list entry.\n * It uses `BuildList` to build individual list objects for each entry in the provided data.\n * The resulting lists are accumulated and structured into a `DataLibrary` object. which\n * groups File Object by dataset_guid.\n *\n * @param {DataLibraryAPIResponse} data - The API response containing the lists to process.\n * @returns {DataLibrary} A structured `DataLibrary` object containing the processed lists.\n */\nexport const BuildLists = (data: DataLibraryAPIResponse): DataLibrary => {\n return Object.entries(data?.lists).reduce((acc, [listId, listData]) => {\n const list = BuildList(listId, listData);\n if (list) acc[listId] = list;\n return acc;\n }, {} as DataLibrary);\n};\n\n/**\n * Calculates the total number of items within a DataList object.\n *\n * @param {DataList} dataList - The DataList object to count items from.\n * @return {number} The total number of items in the DataList.\n */\nexport const getNumberOfItemsInDatalist = (dataList: Datalist): number => {\n if (!dataList?.items) return 0;\n\n return Object.values(dataList.items).reduce((count, item) => {\n if (isCohortItem(item)) {\n return count + 1;\n } else {\n return (\n count +\n Object.values(item?.members ?? {}).reduce((fileCount, x) => {\n if (isFileItem(x)) {\n return fileCount + 1;\n }\n return fileCount;\n }, 0)\n );\n }\n }, 0);\n};\n\nexport const flattenDataList = (dataList: LibraryListItemsGroupedByDataset) => {\n // convert datalist into user-data-library API for for updating.\n\n const items: LibraryListItemsAPI = Object.entries(dataList.items).reduce(\n (acc: any, [id, value]) => {\n if (isCohortItem(value)) {\n acc[id] = value;\n } else {\n return { ...acc, ...value.members }; // TODO: might need to convert this to the API version\n }\n return acc;\n },\n {},\n );\n\n return {\n name: dataList.name,\n items: items,\n };\n};\n\nexport const convertDatasetOrCohortToLibraryListItemsAPI = (\n list: DatasetOrCohort,\n): LibraryListItemsAPI => {\n const result: LibraryListItemsAPI = {};\n\n // Iterate through each entry in the DatasetOrCohort object\n Object.entries(list).forEach(([datasetId, item]) => {\n if (isCohortItem(item)) {\n // Handle cohort items\n result[datasetId] = {\n itemType: 'Gen3GraphQL',\n id: item.id,\n schemaVersion: item.schemaVersion,\n data: item.data,\n name: item.name,\n index: item.index,\n } satisfies CohortItem;\n } else {\n // Handle dataset items\n const members = item.members || {};\n\n // Process each member of the dataset\n Object.entries(members).forEach(([memberId, memberData]) => {\n if (isFileItem(memberData)) {\n result[memberId] = {\n ...(memberData.guid && { guid: memberData.guid }),\n ...(memberData.name && { name: memberData.name }),\n ...(memberData.name && { name: memberData.name }),\n ...(memberData.description && {\n description: memberData.description,\n }),\n ...(memberData.type && { type: memberData.type }),\n dataset_guid: datasetId,\n } satisfies FileItemAPI;\n } else if (memberData.itemType === 'AdditionalData') {\n // Handle additional data items\n result[memberId] = {\n itemType: 'AdditionalData',\n name: memberData.name,\n description: memberData.description,\n documentationUrl: memberData.documentationUrl,\n url: memberData.url,\n dataset_guid: datasetId,\n } as AdditionalDataItem;\n }\n });\n }\n });\n\n return result;\n};\n\nexport const convertDataLibraryToDataLibraryAPI = (\n dataLibrary: DataLibrary,\n): DataLibraryAPI => {\n const result: DataLibraryAPI = {};\n Object.entries(dataLibrary).forEach(([listId, list]) => {\n result[listId] = {\n name: list.name,\n items: convertDatasetOrCohortToLibraryListItemsAPI(list.items),\n version: list.version,\n created_time: list.created_time,\n updated_time: list.updated_time,\n authz: list.authz,\n };\n });\n return result;\n};\n\nexport const extractIndexFromDataLibraryCohort = (query: JSONObject) => {\n try {\n const parsedQuery = parse(query['query'] as string);\n const aggregationField = parsedQuery.definitions\n .filter((def) => def.kind === 'OperationDefinition')\n .flatMap((def) => def.selectionSet.selections)\n .find((sel) => sel.kind === 'Field' && sel.name.value === '_aggregation');\n\n if (aggregationField && 'selectionSet' in aggregationField) {\n const indexField = aggregationField?.selectionSet?.selections.find(\n (sel) => sel.kind === 'Field',\n );\n return indexField ? indexField.name.value : null;\n }\n } catch (error) {\n console.error('Invalid GraphQL query:', error);\n }\n return null;\n};\n\n/**\n * Takes a list of file items from anb array of manifest entries\n * and creates an Object of Files grouped by their dataset guid, which is\n * used to add these to a Data Library List\n * @param data\n * @param dataFieldMapping\n * @constructor\n */\nexport const extractFileDatasetsInRecords = (\n data: Array<Record<string, any>>,\n dataFieldMapping: ExportDatasetFields,\n) => {\n const items: LibraryListItemsAPI = data.reduce(\n (acc: DatasetOrCohort, resource: Record<string, any>) => {\n const dataObjects = resource[dataFieldMapping.dataObjectField];\n\n // Check if dataObjects exists and is an array\n if (!dataObjects || !Array.isArray(dataObjects)) {\n return acc;\n }\n\n const datasetId = resource[dataFieldMapping.datasetIdField] as string;\n if (datasetId === undefined) {\n return acc; // Skip if dataset ID is missing\n }\n\n const datafiles = dataObjects.reduce(\n (dataAcc: DatasetOrCohort, dataObject: Record<string, unknown>) => {\n const fileId = dataObject[dataFieldMapping.dataObjectIdField];\n\n // Skip items without a valid ID\n if (typeof fileId !== 'string' || !fileId) {\n return dataAcc;\n }\n\n const name =\n (dataObject[\n dataFieldMapping?.dataObjectNameField ?? 'name'\n ] as string) ?? 'No Name';\n const size =\n dataObject[dataFieldMapping?.dataObjectSizeField ?? 'size'];\n let sizeString = 'N/A';\n if (typeof size === 'number') {\n sizeString = size.toString();\n }\n if (typeof size === 'string') {\n sizeString = size;\n }\n const md5Sum =\n (dataObject[\n dataFieldMapping?.dataObjectMd5sumField ?? 'md5sum'\n ] as string) ?? 'N/A';\n const url =\n (dataObject[\n dataFieldMapping?.dataObjectUrlField ?? 'url'\n ] as string) ?? 'N/A';\n\n let fileType = 'GA4GH_DRS';\n if (dataFieldMapping?.dataObjectFileTypeValue)\n fileType = dataFieldMapping.dataObjectFileTypeValue;\n\n if (dataFieldMapping?.dataObjectFileTypeField)\n fileType = dataObject[\n dataFieldMapping?.dataObjectFileTypeField\n ] as string;\n\n return {\n ...dataAcc,\n [fileId]: {\n dataset_guid: datasetId as string,\n id: fileId,\n guid: fileId,\n itemType: 'Data',\n name: name,\n size: sizeString,\n md5sum: md5Sum,\n type: fileType,\n url: url,\n } satisfies FileItem,\n };\n },\n {},\n );\n\n return {\n ...acc,\n ...datafiles,\n };\n },\n {} as DataSetMembers,\n );\n\n return items;\n};\n","import { IDBPDatabase, openDB } from 'idb';\nimport { ReturnStatus, StorageService } from './types';\nimport {\n DataLibraryAPI,\n DatalistAPI,\n DatalistAsAPIItems,\n DatalistWithIdAPI,\n isDatalistAPI,\n} from '../types';\nimport { BuildLists } from '../utils';\nimport { isJSONObject, JSONObject } from '../../../types';\nimport { nanoid } from '@reduxjs/toolkit';\nimport { getTimestamp } from '../../../utils';\n\nconst DATABASE_NAME = 'Gen3DataLibrary';\nconst STORE_NAME = 'DataLibraryLists';\n\nexport class LocalStorageService implements StorageService {\n private getDb(): Promise<IDBPDatabase> {\n return openDB(DATABASE_NAME, 1, {\n // TODO add more complete upgrade\n upgrade(db) {\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME, { keyPath: 'id' });\n }\n },\n });\n }\n\n setAllLists = async (\n data: Array<DatalistAsAPIItems>,\n ): Promise<ReturnStatus> => {\n const timestamp = getTimestamp();\n const allLists = data.reduce((acc: JSONObject, x: unknown) => {\n if (!isJSONObject(x)) return acc;\n\n const id = nanoid(10);\n acc[id] = {\n ...(x as JSONObject),\n version: 0,\n created_time: timestamp,\n updated_time: timestamp,\n creator: '{{subject_id}}',\n authz: {\n version: 0,\n authz: [`/users/{{subject_id}}/user-library/lists/${id}`],\n },\n };\n return acc;\n }, {} as JSONObject);\n\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n for (const [id, list] of Object.entries(allLists)) {\n tx.objectStore(STORE_NAME).put({ id, ...(list as object) });\n }\n await tx.done;\n return { status: 200, message: 'success' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_error: unknown) {\n return { isError: true, status: 500, message: 'unable to add lists' };\n }\n };\n\n async getList(id: string): Promise<ReturnStatus> {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readonly');\n const store = tx.objectStore(STORE_NAME);\n const lists = (await store.get(id)) as DatalistAPI;\n if (lists) {\n return {\n status: 200,\n message: 'success',\n lists: {\n [id]: {\n id: id,\n ...lists,\n items: lists.items as any,\n },\n },\n };\n } else {\n return { isError: true, status: 500, message: `${id} does not exist` };\n }\n }\n\n async getLists(): Promise<ReturnStatus> {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readonly');\n const store = tx.objectStore(STORE_NAME);\n\n const lists = (await store.getAll()) as Array<DatalistWithIdAPI>;\n if (!lists) {\n return {\n isError: true,\n status: 500,\n message: 'no lists returned',\n };\n }\n const listMap = lists.reduce((acc: DataLibraryAPI, x) => {\n const { id } = x;\n acc[id] = x;\n return acc;\n }, {});\n const datalists = BuildLists({ lists: listMap });\n return {\n status: 200,\n message: 'success',\n lists: datalists,\n };\n }\n\n async addList(list: DatalistAsAPIItems): Promise<ReturnStatus> {\n const timestamp = getTimestamp();\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const id = nanoid(); // Create an id for the list\n tx.objectStore(STORE_NAME).put({\n id,\n version: 0,\n items: list?.items ?? {},\n creator: '{{subject_id}}',\n authz: {\n version: 0,\n authz: [`/users/{{subject_id}}/user-library/lists/${id}`],\n },\n name: list?.name ?? 'New List',\n created_time: timestamp,\n updated_time: timestamp,\n });\n await tx.done;\n return { status: 200, message: 'list added' };\n } catch (_error: unknown) {\n return {\n isError: true,\n status: 500,\n message: `unable to add list ${list?.name ?? 'New List'}`,\n };\n }\n }\n\n async updateList(\n id: string,\n update: DatalistAsAPIItems,\n ): Promise<ReturnStatus> {\n const { name, items } = update;\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n const listData = await store.get(id);\n\n if (!listData) {\n throw new Error(`List ${id} does not exist`);\n }\n\n const timestamp = getTimestamp();\n const version = listData.version ? listData.version + 1 : 0;\n const updated = {\n ...listData,\n ...{ name, items },\n version: version,\n updated_time: timestamp,\n created_time: listData.created_time,\n };\n\n store.put(updated);\n await tx.done;\n return { status: 200, message: 'success' };\n } catch (error: unknown) {\n let errorMessage = 'An unknown error occurred';\n if (error instanceof Error) {\n errorMessage = error.message;\n }\n return {\n isError: true,\n status: 500,\n message: `Unable to update list: ${id}. Error: ${errorMessage}`,\n };\n }\n }\n\n async deleteList(id: string): Promise<ReturnStatus> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n const item = await store.get(id);\n\n if (!item) {\n throw new Error(`List ${id} does not exist`);\n }\n\n store.delete(id);\n await tx.done;\n return { status: 200, message: `${id} deleted` };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable to delete list: ${id}. Error: ${errorMessage}`,\n };\n }\n }\n async clearLists(): Promise<ReturnStatus> {\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n tx.objectStore(STORE_NAME).clear();\n await tx.done;\n return { status: 200, message: 'list cleared' };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `Unable to clear library. Error: ${errorMessage}`,\n };\n }\n }\n\n async cacheLists(data: DataLibraryAPI): Promise<ReturnStatus> {\n if (!data || typeof data !== 'object') {\n return {\n isError: true,\n status: 500,\n message: 'Invalid or missing lists property in request',\n };\n }\n\n const allLists = Object.entries(data).reduce(\n (acc, [id, x]) => {\n if (!isDatalistAPI(x)) return acc;\n\n acc[id] = {\n ...x,\n };\n return acc;\n },\n {} as Record<string, DatalistAPI>,\n );\n\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n for (const [id, list] of Object.entries(allLists)) {\n tx.objectStore(STORE_NAME).put({ id, ...(list as object) });\n }\n await tx.done;\n return { status: 200, message: 'success' };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 200,\n message: `unable to cache library to local storage. Error: ${errorMessage}`,\n };\n }\n }\n\n async cacheList(id: string, data: DatalistAPI): Promise<ReturnStatus> {\n if (!data || typeof data !== 'object') {\n return {\n isError: true,\n status: 500,\n message: 'Invalid or missing lists property in request',\n };\n }\n try {\n const db = await this.getDb();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n tx.objectStore(STORE_NAME).put({ id: id, ...(data as object) });\n await tx.done;\n return { status: 200, message: 'success' };\n } catch (error: unknown) {\n const errorMessage =\n error instanceof Error ? error.message : 'An unknown error occurred';\n return {\n isError: true,\n status: 500,\n message: `unable to clear library. Error: ${errorMessage}`,\n };\n }\n }\n}\n","import {\n fetchJSONDataFromURL,\n HTTPError,\n HTTPErrorMessages,\n HttpMethod,\n} from '../../../utils/fetch';\nimport { GEN3_DATA_LIBRARY_API } from '../../../constants';\nimport { ReturnStatus, StorageService } from './types';\nimport {\n isDataLibraryAPIResponse,\n DataLibrary,\n DatalistAsAPIItems,\n} from '../types';\nimport { BuildLists } from '../utils';\n\ninterface FetchJSONResponse {\n data?: unknown;\n error?: {\n status: number;\n message: string;\n };\n}\n\nexport const fetchFromDataLibraryAPI = async (\n url: string,\n method: HttpMethod = HttpMethod.GET,\n body: unknown = undefined,\n): Promise<FetchJSONResponse> => {\n try {\n return {\n data: await fetchJSONDataFromURL(url, true, method, body),\n };\n } catch (error: unknown) {\n if (error instanceof HTTPError) {\n return {\n error: {\n status: error.status,\n message:\n error.responseData?.message ||\n error.responseData?.detail ||\n HTTPErrorMessages[error.status] ||\n 'No HTTP Error Message',\n },\n };\n } else {\n return {\n error: {\n status: 500,\n message: 'Unknown Error',\n },\n };\n }\n }\n};\n\nconst responseFromMutation = <T = DataLibrary>(\n responseReceived: FetchJSONResponse,\n): ReturnStatus<T> => {\n if (responseReceived.error) {\n return {\n isError: true,\n ...responseReceived.error,\n };\n }\n return {\n lists: responseReceived.data as unknown as T,\n message: 'success',\n status: 200,\n };\n};\n\nexport class APIStorageService implements StorageService<DataLibrary> {\n private readonly apiBaseUrl: string;\n private pendingRequests: Map<string, Promise<FetchJSONResponse>> = new Map();\n\n constructor(apiBaseUrl = `${GEN3_DATA_LIBRARY_API}`) {\n this.apiBaseUrl = apiBaseUrl;\n }\n\n private async dedupedRequest(\n url: string,\n method: HttpMethod = HttpMethod.GET,\n body: unknown = undefined,\n ): Promise<FetchJSONResponse> {\n // Create a unique key for this request\n const requestKey = `${method}:${url}:${body ? JSON.stringify(body) : ''}`;\n\n // If this exact request is already in progress, return the pending promise\n if (this.pendingRequests.has(requestKey)) {\n return this.pendingRequests.get(requestKey)!;\n }\n\n // Otherwise, make the request and store the promise\n const requestPromise = fetchFromDataLibraryAPI(url, method, body);\n this.pendingRequests.set(requestKey, requestPromise);\n\n try {\n // Wait for the request to complete\n const result = await requestPromise;\n return result;\n } finally {\n // Remove the request from pending requests after it completes\n this.pendingRequests.delete(requestKey);\n }\n }\n\n async getLists(): Promise<ReturnStatus> {\n const { data, error } = await this.dedupedRequest(`${this.apiBaseUrl}`);\n if (error) {\n return {\n isError: true,\n ...error,\n };\n }\n if (data && isDataLibraryAPIResponse(data)) {\n const datalists = BuildLists(data);\n return {\n lists: datalists,\n status: 200,\n message: 'success',\n };\n }\n return { lists: {}, status: 200, message: 'no list returned' };\n }\n\n async addList(list: DatalistAsAPIItems): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n `${this.apiBaseUrl}`,\n HttpMethod.PUT,\n JSON.stringify({\n lists: [list],\n }),\n );\n\n return responseFromMutation(response);\n }\n\n async updateList(\n id: string,\n list: DatalistAsAPIItems,\n ): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n `${this.apiBaseUrl}/${id}`,\n HttpMethod.PUT,\n JSON.stringify(list),\n );\n return responseFromMutation(response);\n }\n\n async deleteList(id: string): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n `${this.apiBaseUrl}/${id}`,\n HttpMethod.DELETE,\n );\n\n return responseFromMutation(response);\n }\n\n async clearLists(): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n this.apiBaseUrl,\n HttpMethod.DELETE,\n );\n return responseFromMutation(response);\n }\n\n async setAllLists(lists: Array<DatalistAsAPIItems>): Promise<ReturnStatus> {\n const response = await fetchFromDataLibraryAPI(\n this.apiBaseUrl,\n HttpMethod.POST,\n JSON.stringify({ lists: Object.values(lists) }),\n );\n return responseFromMutation(response);\n }\n\n async getList(id: string): Promise<ReturnStatus<DataLibrary>> {\n const { data, error } = await fetchFromDataLibraryAPI(\n `${this.apiBaseUrl}/${id}`,\n );\n\n if (error) {\n return {\n isError: true,\n ...error,\n };\n }\n if (isDataLibraryAPIResponse(data)) {\n const datalists = BuildLists(data);\n return {\n lists: datalists,\n status: 200,\n message: 'success',\n };\n }\n return {\n isError: true,\n status: 500,\n message: `Unknown error getting list ${id}`,\n };\n }\n}\n","import { ReturnStatus, StorageService } from './types';\nimport { DatalistAsAPIItems } from '../types';\nimport { LocalStorageService } from './LocalStorageService';\nimport { APIStorageService } from './APIStorageService';\nimport { convertDataLibraryToDataLibraryAPI } from '../utils';\n\nexport class CachedAPIService implements StorageService {\n private localStorageDataLibrary: LocalStorageService;\n private apiDataLibrary: APIStorageService;\n constructor() {\n this.localStorageDataLibrary = new LocalStorageService(); // always update local storage\n this.apiDataLibrary = new APIStorageService();\n }\n\n async getLists(): Promise<ReturnStatus> {\n // do a network request to get the library\n // get the remote list\n const apiResults = await this.apiDataLibrary.getLists();\n\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n\n const dataLibrary = convertDataLibraryToDataLibraryAPI(\n apiResults?.lists ?? {},\n );\n await this.localStorageDataLibrary.cacheLists(dataLibrary);\n return apiResults;\n }\n\n async getList(id: string): Promise<ReturnStatus> {\n return await this.localStorageDataLibrary.getList(id);\n }\n\n async getCachedLists(id: string): Promise<ReturnStatus> {\n return await this.localStorageDataLibrary.getList(id);\n }\n\n async setAllLists(lists: Array<DatalistAsAPIItems>): Promise<ReturnStatus> {\n const apiResults = await this.apiDataLibrary.setAllLists(lists);\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n const dataLibrary = convertDataLibraryToDataLibraryAPI(\n apiResults?.lists ?? {},\n );\n await this.localStorageDataLibrary.cacheLists(dataLibrary);\n\n return apiResults;\n }\n\n async addList(list: DatalistAsAPIItems): Promise<ReturnStatus> {\n // update the API list\n const apiResults = await this.apiDataLibrary.addList(list);\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n const cacheResults = await this.localStorageDataLibrary.addList(list);\n return {\n ...cacheResults,\n lists: undefined,\n };\n }\n\n async updateList(\n id: string,\n list: DatalistAsAPIItems,\n ): Promise<ReturnStatus> {\n const apiResults = await this.apiDataLibrary.updateList(id, list);\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n\n return await this.localStorageDataLibrary.cacheList(\n id,\n (apiResults.lists as any) ?? {},\n );\n }\n\n async deleteList(id: string): Promise<ReturnStatus> {\n const apiResults = await this.apiDataLibrary.deleteList(id);\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n return await this.localStorageDataLibrary.deleteList(id);\n }\n\n async clearLists(): Promise<ReturnStatus> {\n const apiResults = await this.apiDataLibrary.clearLists();\n if (apiResults.isError) {\n return {\n ...apiResults,\n lists: undefined,\n };\n }\n return await this.localStorageDataLibrary.clearLists();\n }\n}\n","import { ReturnStatus, StorageService } from './types';\nimport { DataLibraryStoreMode, DatalistAsAPIItems } from '../types';\nimport { LocalStorageService } from './LocalStorageService';\nimport { APIStorageService } from './APIStorageService';\nimport { CachedAPIService } from './CachedAPIStorageService';\n\nexport class DataLibraryStorageService implements StorageService {\n private storageService: StorageService;\n\n constructor(mode: DataLibraryStoreMode = DataLibraryStoreMode.ApiOnly) {\n if (mode === DataLibraryStoreMode.ApiOnly) {\n this.storageService = new APIStorageService();\n } else if (mode === DataLibraryStoreMode.ApiAndLocal)\n this.storageService = new CachedAPIService();\n else this.storageService = new LocalStorageService();\n }\n\n async setStorageMode(mode: DataLibraryStoreMode) {\n if (mode === DataLibraryStoreMode.ApiOnly) {\n this.storageService = new APIStorageService();\n } else if (mode === DataLibraryStoreMode.ApiAndLocal)\n this.storageService = new CachedAPIService();\n else this.storageService = new LocalStorageService();\n }\n\n // private async syncApiAndLocal() {\n // const { lists: localData, isError: localError } =\n // await this.localStorageDataLibrary.getLists();\n // const { lists: apiData, isError: apiError } =\n // await this.apiDataLibrary.getLists();\n //\n // if (localError || apiError) {\n // return;\n // }\n //\n // const mergedData: Record<string, Datalist> = { ...localData };\n //\n // // First, update any existing items with newer versions from API\n // Object.values(apiData?.lists ?? {}).forEach((apiList) => {\n // const id = apiList.id as keyof DataLibrary;\n // const localList = localData?.[id];\n // if (\n // !localList ||\n // storage Date(apiList.updatedTime) > storage Date(localList.updatedTime)\n // ) {\n // mergedData[id] = apiList;\n // }\n // });\n //\n // // Push local-only changes to API\n // const syncPromises: Promise<any>[] = [];\n //\n // for (const [id, localList] of Object.entries(localData?.lists ?? {})) {\n // if (!apiData?.[id]) {\n // // This list exists locally but not in API, so push it to API\n // syncPromises.push(this.apiDataLibrary.addList(localList));\n // } else if (\n // storage Date(localList.updatedTime) > storage Date(apiData[id].updatedTime)\n // ) {\n // // Local list is newer than API, so update API\n // syncPromises.push(this.apiDataLibrary.updateList(localList));\n // }\n // }\n //\n // // Wait for all API operations to complete\n // await Promise.all(syncPromises);\n // await this.localStorageDataLibrary.cacheLists({ lists: mergedData });\n // }\n\n async getLists(): Promise<ReturnStatus> {\n return await this.storageService.getLists();\n }\n\n async getList(id: string): Promise<ReturnStatus> {\n return await this.storageService.getList(id);\n }\n\n async getCachedLists(id: string): Promise<ReturnStatus> {\n return await this.storageService.getList(id);\n }\n\n async setAllLists(lists: Array<DatalistAsAPIItems>): Promise<ReturnStatus> {\n return await this.storageService.setAllLists(lists ?? {});\n }\n\n async addList(list: DatalistAsAPIItems): Promise<ReturnStatus> {\n return await this.storageService.addList(list);\n }\n\n async updateList(\n id: string,\n list: DatalistAsAPIItems,\n ): Promise<ReturnStatus> {\n return await this.storageService.updateList(id, list);\n }\n\n async deleteList(id: string): Promise<ReturnStatus> {\n return await this.storageService.deleteList(id);\n }\n\n async clearLists(): Promise<ReturnStatus> {\n return await this.storageService.clearLists();\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useDeepCompareMemo } from 'use-deep-compare';\nimport {\n DataLibrary,\n DataLibraryStoreMode,\n Datalist,\n DataListUpdate,\n DatasetOrCohort,\n LibraryListItemsGroupedByDataset,\n} from './types';\nimport {\n convertDatasetOrCohortToLibraryListItemsAPI,\n flattenDataList,\n} from './utils';\nimport { DataLibraryStorageService } from './storage/DataLibraryStorageService';\nimport { StorageOperationResults } from '../../types';\n\nconst EMPTY_LIST: Datalist = {\n items: {},\n version: 0,\n created_time: 'not_set',\n updated_time: 'not_set',\n name: '',\n id: '',\n authz: {\n version: -1,\n authz: [],\n },\n};\n\ninterface UseDataLibraryOptions {\n storageMode: DataLibraryStoreMode;\n}\n\ninterface UseDataLibraryResult {\n dataLibrary: DataLibrary; // the current contents of the DataLibrary\n isLoading: boolean; // Loading all lists\n isUpdating: string | null; // single list update will contain ListId if updating\n error: StorageOperationResults | null; // null if there is no error\n addListToDataLibrary: (\n items: DatasetOrCohort,\n name?: string,\n ) => Promise<StorageOperationResults>;\n updateListInDataLibrary: (\n payload: DataListUpdate,\n ) => Promise<StorageOperationResults>;\n deleteListFromDataLibrary: (id: string) => Promise<StorageOperationResults>;\n clearLibrary: () => Promise<StorageOperationResults>;\n setAllListsInDataLibrary: (\n data: Array<LibraryListItemsGroupedByDataset>,\n ) => Promise<StorageOperationResults>;\n getDatalist: (id: string) => Datalist;\n}\n\nconst DEFAULT_LIST_NAME = 'List';\n\nconst useDataLibrary = (\n options: UseDataLibraryOptions = {\n storageMode: DataLibraryStoreMode.ApiOnly,\n },\n): UseDataLibraryResult => {\n // State management\n const [isLoading, setIsLoading] = useState(false);\n const [isUpdating, setIsUpdating] = useState<string | null>(null);\n const [error, setError] = useState<StorageOperationResults | null>(null);\n const [lists, setLists] = useState<DataLibrary>({});\n\n // Refs\n const hasInitializedRef = useRef(false);\n\n // Services\n const storage = useRef(\n new DataLibraryStorageService(options.storageMode),\n ).current;\n\n const refreshLists = useCallback(async () => {\n const results = await storage.getLists();\n if (results.isError) {\n setError(results);\n return results;\n }\n\n setLists(results.lists ?? {});\n setError(null);\n return results;\n }, [storage]);\n\n const applyOperationResult = useCallback(\n async (result: StorageOperationResults) => {\n if (result.isError) {\n setError(result);\n return;\n }\n await refreshLists();\n },\n [refreshLists],\n );\n\n const runOperation = useCallback(\n async (\n operation: () => Promise<StorageOperationResults>,\n updatingId?: string,\n ) => {\n setError(null);\n\n if (updatingId) setIsUpdating(updatingId);\n else setIsLoading(true);\n\n const result = await operation();\n await applyOperationResult(result);\n\n if (updatingId) setIsUpdating(null);\n else setIsLoading(false);\n\n return result;\n },\n [applyOperationResult],\n );\n\n const createUniqueListName = useCallback(\n (preferredName: string = DEFAULT_LIST_NAME) => {\n const existingNames = new Set(Object.values(lists).map((x) => x.name));\n\n if (!existingNames.has(preferredName)) return preferredName;\n\n let counter = 1;\n let candidate = `${preferredName} ${counter}`;\n while (existingNames.has(candidate)) {\n counter += 1;\n candidate = `${preferredName} ${counter}`;\n }\n return candidate;\n },\n [lists],\n );\n\n // Lifecycle effects\n useEffect(() => {\n const initialize = async () => {\n if (hasInitializedRef.current) return;\n\n setError(null);\n setIsLoading(true);\n\n await refreshLists();\n\n setIsLoading(false);\n hasInitializedRef.current = true;\n };\n\n void initialize();\n }, [refreshLists]);\n\n // CRUD operations\n const addListToDataLibrary = useCallback(\n async (items: DatasetOrCohort, name?: string) => {\n const apiItems = convertDatasetOrCohortToLibraryListItemsAPI(items);\n const payload = {\n items: apiItems,\n name: createUniqueListName(name ?? DEFAULT_LIST_NAME),\n };\n\n return runOperation(() => storage.addList(payload));\n },\n [createUniqueListName, runOperation, storage],\n );\n\n const updateListInDataLibrary = useCallback(\n async (payload: DataListUpdate) => {\n const flattened = flattenDataList(payload);\n\n return runOperation(\n () =>\n storage.updateList(payload.id, {\n name: payload.name,\n items: flattened.items,\n }),\n payload.id,\n );\n },\n [runOperation, storage],\n );\n\n const deleteListFromDataLibrary = useCallback(\n async (id: string) => runOperation(() => storage.deleteList(id)),\n [runOperation, storage],\n );\n\n const clearLibrary = useCallback(\n async () => runOperation(() => storage.clearLists()),\n [runOperation, storage],\n );\n\n const setAllListsInDataLibrary = useCallback(\n async (data: Array<LibraryListItemsGroupedByDataset>) => {\n const flattenedLists = data.map(flattenDataList);\n return runOperation(() => storage.setAllLists(flattenedLists));\n },\n [runOperation, storage],\n );\n\n const getDatalist = useCallback(\n (id: string) => {\n const list = lists[id];\n if (list) return list;\n\n setError({\n isError: true,\n status: 404,\n message: 'List not found. Returning empty list.',\n });\n return EMPTY_LIST;\n },\n [lists],\n );\n\n const results = useDeepCompareMemo(\n () => ({\n dataLibrary: lists,\n isLoading,\n isUpdating,\n error,\n addListToDataLibrary,\n updateListInDataLibrary,\n deleteListFromDataLibrary,\n clearLibrary,\n setAllListsInDataLibrary,\n getDatalist,\n }),\n [\n addListToDataLibrary,\n clearLibrary,\n deleteListFromDataLibrary,\n error,\n getDatalist,\n isLoading,\n isUpdating,\n lists,\n setAllListsInDataLibrary,\n updateListInDataLibrary,\n ],\n );\n\n return results;\n};\n\nexport default useDataLibrary;\n","import { gen3Api } from '../gen3/gen3Api';\nimport { GEN3_FENCE_API, GEN3_REDIRECT_URL } from '../../constants';\n\nimport { fetchFence } from './fetchFence';\n\nexport interface NameUrl {\n readonly name: string;\n readonly url: string;\n}\n\nexport interface Gen3LoginProvider {\n readonly desc?: string;\n readonly id: string;\n readonly idp: string;\n readonly name: string;\n readonly secondary: boolean;\n readonly url: string;\n readonly urls: Array<NameUrl>;\n}\n\nexport interface Gen3FenceLoginProviders {\n readonly default_provider: Gen3LoginProvider;\n readonly providers: Array<Gen3LoginProvider>;\n}\n\ninterface PresignedUrlRequest {\n readonly guid: string;\n readonly what: string;\n}\n\ninterface PresignedUrlResponse {\n readonly url: string;\n}\n\n/**\n * Creates a fence API endpoint for handling login/data processes\n * @param endpoints - defined endpoint query for logging in\n * @returns: The generated fence login API slice\n */\nexport const loginProvidersApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getLoginProviders: builder.query<Gen3FenceLoginProviders, void>({\n query: () => `${GEN3_FENCE_API}/login`,\n }),\n getDownload: builder.query<PresignedUrlResponse, string>({\n query: (guid) => `${GEN3_FENCE_API}/data/download/${guid}`,\n }),\n getPresignedUrl: builder.query<PresignedUrlResponse, PresignedUrlRequest>({\n query: ({ guid, what }) => `${GEN3_FENCE_API}/data/${what}/${guid}`,\n }),\n }),\n});\n\nexport const {\n useGetLoginProvidersQuery,\n useGetDownloadQuery,\n useLazyGetDownloadQuery,\n useGetPresignedUrlQuery,\n useLazyGetPresignedUrlQuery,\n} = loginProvidersApi;\n\n/**\n * Logout from fence\n */\n\nexport const logoutFence = async (redirect = '/') =>\n await fetchFence({\n endpoint: `${GEN3_FENCE_API}/logout?next=${GEN3_REDIRECT_URL}${redirect}`,\n method: 'GET',\n });\n","import { gen3Api } from '../gen3';\nimport { GEN3_FENCE_API } from '../../constants';\n\nexport interface APIKey {\n readonly jti: string;\n readonly exp: number;\n}\nexport interface Gen3FenceCredentials {\n readonly jtis: ReadonlyArray<APIKey>;\n}\n\n// extending the gen3API to add a tag to the endpoints\nconst credentialsWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Credentials'],\n});\n\ninterface DeleteCredentialParams {\n readonly csrfToken?: string;\n readonly id: string;\n}\n\ninterface AuthorizeFromCredentialsParams {\n api_key: string;\n key_id: string;\n}\nexport interface AuthTokenResponse {\n access_token: string;\n}\n\n/**\n * Adds a credentialsApi into the base gen3Api\n * @endpoints Includes get, add, and remove credential operations\n * @see https://github.com/uc-cdis/fence/blob/master/openapis/swagger.yaml#L972-L1033\n * @param getCredentials - List all the API keys for the current user\n * @param addNewCredential - Get a new API key for the current user\n * @param removeCredential - Delete API access key with given ID for current user\n * @returns: A fence credential API for manipulating user credentials\n */\nexport const credentialsApi = credentialsWithTags.injectEndpoints({\n endpoints: (builder) => ({\n getCredentials: builder.query<ReadonlyArray<APIKey>, void>({\n query: () => `${GEN3_FENCE_API}/credentials/api`,\n transformResponse: (\n response: Gen3FenceCredentials,\n ): ReadonlyArray<APIKey> => response['jtis'], // the response is a JSON object with a single key,\n // \"jtis\", which is an array of API keys\n // no need to transform the response, since the API returns the correct format\n providesTags: ['Credentials'],\n }),\n addNewCredential: builder.mutation({\n query: (csrfToken: string) => ({\n url: `${GEN3_FENCE_API}/credentials/api`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-csrf-token': csrfToken,\n },\n body: {\n scope: ['user', 'data'],\n },\n }),\n invalidatesTags: ['Credentials'],\n }),\n removeCredential: builder.mutation<void, DeleteCredentialParams>({\n query: ({ csrfToken, id }) => ({\n url: `${GEN3_FENCE_API}/credentials/api/${id}`,\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n ...(csrfToken && { 'x-csrf-token': csrfToken }),\n },\n }),\n invalidatesTags: ['Credentials'],\n }),\n authorizeFromCredentials: builder.mutation<\n AuthTokenResponse,\n AuthorizeFromCredentialsParams\n >({\n query: (params) => ({\n url: `${GEN3_FENCE_API}/credentials/api/access_token`,\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: {\n api_key: params.api_key, // pragma: allowlist secret\n key_id: params.key_id,\n },\n }),\n }),\n }),\n});\n\nexport const {\n useGetCredentialsQuery,\n useAddNewCredentialMutation,\n useRemoveCredentialMutation,\n useAuthorizeFromCredentialsMutation,\n} = credentialsApi;\n","import { gen3Api } from '../gen3';\n\nexport interface JWTKeys {\n keys: ReadonlyArray<string[2]>\n}\n\n// extending the gen3API to add a tag to the endpoints\nconst credentialsWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['fenceJWT'],\n});\n\n/**\n * A fence API for getting the public keys which can be used to validate\n * JWTs issued and signed by fence\n * @returns: Fence public keys\n */\nexport const jwtApi = credentialsWithTags.injectEndpoints({\n endpoints: (builder) => ({\n getJWKKeys: builder.query<ReadonlyArray<JWTKeys>, void>({\n query: () => 'user/jwt/keys',\n providesTags: ['fenceJWT'],\n }),\n }),\n});\n\nexport const {\n useGetJWKKeysQuery,\n} = jwtApi;\n","// using a random uuid v4 as the namespace\nexport const GEN3_APP_NAMESPACE = '7bfaa818-c69c-457e-8d87-413cf60c25f0';\n","import React, { ComponentType, useEffect } from 'react';\nimport { coreStore } from '../../store';\nimport { v5 as uuidv5 } from 'uuid';\nimport { addGen3AppMetadata, EntityType } from './gen3AppsSlice';\nimport {\n configureStore,\n Dispatch,\n Middleware,\n UnknownAction,\n} from '@reduxjs/toolkit';\nimport { Action, Store } from 'redux';\nimport {\n createDispatchHook,\n createSelectorHook,\n createStoreHook,\n Provider,\n ReactReduxContextValue,\n TypedUseSelectorHook,\n} from 'react-redux';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\nimport { registerGen3App } from './gen3AppRegistry';\nimport { DataStatus } from '../../dataAccess';\nimport { CookiesProvider } from 'react-cookie';\nimport { GEN3_APP_NAMESPACE } from './constants';\n\nexport interface CreateGen3AppOptions<T> {\n readonly App: ComponentType<T>;\n readonly name: string;\n readonly version: string;\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n}\n\nexport const getGen3AppId = (name: string, version: string): string => {\n const nameVersion = `${name}::${version}`;\n return uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n};\n\n/**\n * Creates a Gen3App that is dynamically loaded\n */\nexport const createGen3App = <\n T extends Record<any, any> = Record<string, any>,\n>({\n App,\n name,\n version,\n requiredEntityTypes,\n}: CreateGen3AppOptions<T>): React.FC<T> => {\n // create a stable id for this app\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n // need to create store and provider.\n // return a component representing this app\n // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added\n // a route can be setup for the app\n\n // need to register its name, category, path, data requirements\n // this will be used to build page3\n // click app link\n // const store = configureStore({\n // // TODO allow user to pass in a reducer in CreateGen3AppOptions?\n // reducer: (state) => state,\n // devTools: {\n // name: `${nameVersion}::${id}`,\n // },\n // });\n\n const Gen3AppWrapper: React.FC<T> = (props: T) => {\n useEffect(() => {\n document.title = `${name}`;\n });\n\n return <App {...props} />;\n };\n\n // add the app to the store\n coreStore.dispatch(\n addGen3AppMetadata({\n id,\n name,\n version,\n requiredEntityTypes,\n }),\n );\n registerGen3App(name, Gen3AppWrapper as unknown as React.ReactNode);\n\n return Gen3AppWrapper;\n};\n\nexport interface AppDataSelectorResponse<T> {\n readonly data?: T;\n readonly status: DataStatus;\n readonly error?: string;\n}\n\nexport interface UseAppDataResponse<T> {\n readonly data?: T;\n readonly error?: string;\n readonly isUninitialized: boolean;\n readonly isFetching: boolean;\n readonly isSuccess: boolean;\n readonly isError: boolean;\n}\n\nexport interface UseAppDataHook<P, T> {\n (...params: P[]): UseAppDataResponse<T>;\n}\n\nexport interface CreateGEN3AppStore {\n readonly name: string;\n readonly version: string;\n readonly reducers: (...args: any) => any;\n middleware?: Middleware<unknown, any, Dispatch<UnknownAction>>;\n}\n\n// ----------------------------------------------------------------------------------------\n// Apps with Local Storage\n//\n\nexport const createAppStore = (\n options: CreateGEN3AppStore,\n): Record<any, any> => {\n const { name, version, reducers, middleware } = options;\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n const store = configureStore({\n reducer: reducers,\n devTools: {\n name: `${nameVersion}::${id}`,\n },\n middleware: (getDefaultMiddleware) =>\n middleware\n ? getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n ],\n },\n }).concat(middleware)\n : getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [\n FLUSH,\n REHYDRATE,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n ],\n },\n }),\n });\n type AppState = ReturnType<typeof reducers>;\n const context = React.createContext<ReactReduxContextValue | null>(null);\n\n type AppDispatch = typeof store.dispatch;\n const useAppSelector: TypedUseSelectorHook<AppState> =\n createSelectorHook(context);\n const useAppDispatch: () => AppDispatch = createDispatchHook(context);\n const useAppStore = createStoreHook(context);\n\n return {\n id: id,\n AppStore: store,\n AppContext: context,\n useAppSelector: useAppSelector,\n useAppDispatch: useAppDispatch,\n useAppStore: useAppStore,\n };\n};\n\nexport interface CreateGen3AppWithOwnStoreOptions<\n T extends Record<any, any> = Record<string, any>,\n A extends Action = UnknownAction,\n S = any,\n> {\n readonly App: ComponentType<T>;\n readonly id: string; // unique id for this app\n readonly name: string; // name of the app\n readonly version: string; // version of the app, should be unique\n readonly requiredEntityTypes: ReadonlyArray<EntityType>;\n readonly store: Store<S, A>; // the redux-store for this app\n readonly context: any;\n}\n\nexport const createGen3AppWithOwnStore = <\n T extends Record<any, any> = Record<string, any>,\n A extends Action = UnknownAction,\n S = any,\n>(\n options: CreateGen3AppWithOwnStoreOptions<T, A, S>,\n): React.ReactNode => {\n const { App, id, name, version, requiredEntityTypes, store, context } =\n options;\n\n // need to create store and provider.\n // return a component representing this app\n // if component gets added to a list, then the list can be iterated in index.js and each provider component can be added\n // a route can be setup for the app\n\n // need to register its name, category, path, data requirements\n // this will be used to build page3\n // click app link\n\n const Gen3AppWrapper: React.FC<T> = (props: T) => {\n useEffect(() => {\n document.title = `GEN3 - ${name}`;\n });\n\n return (\n <Provider store={store} context={context}>\n <CookiesProvider>\n <App {...props} />\n </CookiesProvider>\n </Provider>\n );\n };\n\n // add the app to the store\n coreStore.dispatch(\n addGen3AppMetadata({\n id,\n name,\n version,\n requiredEntityTypes,\n }),\n );\n registerGen3App(name, Gen3AppWrapper as unknown as React.ReactNode);\n return Gen3AppWrapper as unknown as React.ReactNode;\n};\n","import * as React from 'react';\nimport {\n createDispatchHook,\n createStoreHook,\n createSelectorHook,\n ReactReduxContextValue,\n} from 'react-redux';\nimport {\n ApiModules,\n buildCreateApi,\n coreModule,\n CreateApi,\n reactHooksModule,\n BaseQueryFn,\n fetchBaseQuery,\n} from '@reduxjs/toolkit/query/react';\nimport { configureStore } from '@reduxjs/toolkit';\nimport {\n FLUSH,\n PAUSE,\n PERSIST,\n PURGE,\n REGISTER,\n REHYDRATE,\n} from 'redux-persist';\nimport { GEN3_API } from '../../constants';\nimport { getCookie } from 'cookies-next';\nimport { v5 as uuidv5 } from 'uuid';\nimport { GEN3_APP_NAMESPACE } from './constants';\n\nexport const createAppApiForRTKQ = (\n reducerPath: string,\n name: string,\n version: string,\n additionalReducers?: (...args: any) => any,\n baseQuery?: BaseQueryFn,\n) => {\n const nameVersion = `${name}::${version}`;\n const id = uuidv5(nameVersion, GEN3_APP_NAMESPACE);\n\n const appContext = React.createContext<ReactReduxContextValue | null>(null);\n const useAppSelector = createSelectorHook(appContext);\n const useAppDispatch = createDispatchHook(appContext);\n const useAppStore = createStoreHook(appContext);\n\n const appCreateApi: CreateApi<keyof ApiModules<any, any, any, any>> =\n buildCreateApi(\n coreModule(),\n reactHooksModule({\n hooks: {\n useDispatch: useAppDispatch,\n useSelector: useAppSelector,\n useStore: useAppStore,\n },\n }),\n );\n\n const appRTKQApi = appCreateApi({\n reducerPath: reducerPath,\n baseQuery:\n baseQuery ??\n fetchBaseQuery({\n baseUrl: `${GEN3_API}`,\n prepareHeaders: (headers) => {\n headers.set('Content-Type', 'application/json');\n if (process.env.NODE_ENV === 'development') {\n // NOTE: This cookie can only be accessed from the client side\n // in development mode. Otherwise, the cookie is set as httpOnly\n const accessToken = getCookie('credentials_token');\n if (accessToken)\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n\n return headers;\n },\n }),\n endpoints: () => ({}),\n });\n\n const appMiddleware = appRTKQApi.middleware;\n const appStore = configureStore({\n devTools: {\n name: `${nameVersion}::${id}`,\n },\n reducer: {\n [appRTKQApi.reducerPath]: appRTKQApi.reducer,\n ...additionalReducers,\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({\n serializableCheck: {\n ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],\n },\n }).concat(appMiddleware),\n });\n\n return {\n useAppSelector: useAppSelector,\n useAppDispatch: useAppDispatch,\n useAppStore: useAppStore,\n AppContext: appContext,\n appApi: appRTKQApi,\n appContext: appContext,\n appStore: appStore,\n };\n};\n","import { gen3Api } from '../gen3';\nimport { JSONObject } from '../../types';\nimport { GEN3_GUPPY_API } from '../../constants';\n\nexport const graphQLWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['graphQL'],\n});\n\n/**\n * Creates a graphQLAPI for graphql queries to elasticsearch indices via guppy\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md\n * @param query - Resolver function which configures the graphql query with graphQLParams argument\n * @returns: A guppy search API for fetching metadata\n */\nexport const graphQLAPI = graphQLWithTags.injectEndpoints({\n endpoints: (builder) => ({\n graphQL: builder.query<JSONObject, JSONObject>({\n query: (graphQLParams) => ({\n url: `${GEN3_GUPPY_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(graphQLParams),\n }),\n }),\n }),\n});\n\nexport const { useGraphQLQuery } = graphQLAPI;\n","import { gen3Api } from '../gen3';\nimport { GEN3_GUPPY_API } from '../../constants';\nimport { convertFilterSetToGqlFilter, GQLFilter } from '../filters';\nimport { GuppyDownloadDataParams, GuppyDownloadDataRequest } from './types';\n\nexport interface GuppyDownloadDataQueryParams extends Omit<\n GuppyDownloadDataRequest,\n 'filter'\n> {\n filter: GQLFilter;\n}\n\ninterface DownloadRequestStatus {\n readonly status: string;\n readonly message: string;\n}\n\n/**\n * Creates a Guppy API for fetching bulk (> 10K rows) elasticsearch data\n * @see https://github.com/uc-cdis/guppy/blob/master/doc/download.md\n * @param endpoints - Resolver function which configures the query with\n * type, filter, accessibility, fields, and sort arguments\n * @returns: A guppy download API for fetching bulk metadata\n */\nexport const guppyDownloadApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n downloadFromGuppy: builder.query({\n query: ({\n type,\n filter,\n accessibility,\n fields,\n sort,\n }: GuppyDownloadDataParams) => {\n const queryBody: GuppyDownloadDataQueryParams = {\n filter: convertFilterSetToGqlFilter(filter),\n ...{ type, accessibility, fields, sort },\n };\n\n return {\n url: `${GEN3_GUPPY_API}/download`,\n method: 'POST',\n body: queryBody,\n cache: 'no-cache',\n };\n },\n transformResponse: (response: DownloadRequestStatus) => {\n return response;\n },\n }),\n }),\n});\n\nexport const { useDownloadFromGuppyQuery, useLazyDownloadFromGuppyQuery } =\n guppyDownloadApi;\n","import { gen3Api } from '../gen3';\nimport { GEN3_MANIFEST_API } from '../../constants';\nimport { Manifest } from './types';\n\nconst TAGS = 'manifest';\n\nexport const manifestTags = gen3Api.enhanceEndpoints({\n addTagTypes: [TAGS],\n});\n\nexport const manifestApi = manifestTags.injectEndpoints({\n endpoints: (builder) => ({\n getManifestServiceStatus: builder.query<string, void>({\n query: () => `${GEN3_MANIFEST_API}/_status`,\n }),\n getFileManifest: builder.query<Manifest, void>({\n query: () => `${GEN3_MANIFEST_API}`,\n }),\n getFileFromManifest: builder.query<Manifest, string>({\n query: (id) => `${GEN3_MANIFEST_API}/file/${id}`,\n }),\n addFileManifest: builder.mutation<string, Manifest>({\n query: (manifest) => ({\n url: `${GEN3_MANIFEST_API}`,\n method: 'POST',\n body: manifest,\n }),\n transformResponse: (response: { filename: string }) => {\n return response.filename;\n },\n invalidatesTags: [TAGS],\n }),\n getCohortManifest: builder.query<Manifest, void>({\n query: () => `${GEN3_MANIFEST_API}/cohorts`,\n }),\n addCohortManifest: builder.mutation<string, Manifest>({\n query: (manifest) => ({\n url: `${GEN3_MANIFEST_API}/cohorts`,\n method: 'POST',\n body: manifest,\n }),\n transformResponse: (response: { guid: string }) => {\n return response.guid;\n },\n invalidatesTags: [TAGS],\n }),\n getMetadataManifest: builder.query<Manifest, void>({\n query: () => `${GEN3_MANIFEST_API}/metadata`,\n }),\n getMetadataFromManifest: builder.query<Manifest, string>({\n query: (id) => `${GEN3_MANIFEST_API}/metadata/${id}`,\n }),\n addMetadataManifest: builder.mutation<string, Record<string, unknown>>({\n query: (data) => ({\n url: `${GEN3_MANIFEST_API}/metadata`,\n method: 'POST',\n body: data,\n }),\n transformResponse: (response: { guid: string }) => {\n return response.guid;\n },\n invalidatesTags: [TAGS],\n }),\n }),\n});\n\nexport const {\n useGetManifestServiceStatusQuery,\n useLazyGetManifestServiceStatusQuery,\n useGetFileManifestQuery,\n useGetCohortManifestQuery,\n useGetMetadataManifestQuery,\n useGetFileFromManifestQuery,\n useGetMetadataFromManifestQuery,\n useAddCohortManifestMutation,\n useAddFileManifestMutation,\n useAddMetadataManifestMutation,\n} = manifestApi;\n","import { JSONObject } from '../../types';\nimport { gen3Api } from '../gen3';\nimport Queue from 'queue';\nimport { GEN3_CROSSWALK_API, GEN3_MDS_API } from '../../constants';\nimport { JSONPath } from 'jsonpath-plus';\nimport { CrosswalkInfo, IndexedMetadataFilters } from './types';\n\nexport interface Metadata {\n readonly entries: Array<Record<string, unknown>>;\n}\n\nexport type CrosswalkArray = Array<CrosswalkInfo>;\n\ninterface ToMapping {\n id: string;\n dataPath: string[];\n}\n\ninterface CrossWalkParams {\n readonly ids: string[];\n readonly toPaths: Array<ToMapping>;\n}\n\nexport interface MetadataResponse {\n data: Array<JSONObject>;\n hits: number;\n}\n\nexport interface MetadataPaginationParams {\n pageSize: number;\n offset: number;\n}\n\nexport interface MetadataRequestParams extends MetadataPaginationParams {\n guidType: string;\n studyField: string;\n}\n\ninterface IndexedMetadataRequestParams extends MetadataRequestParams {\n indexKeys: Array<string>;\n filterEmpty?: IndexedMetadataFilters;\n}\n\nconst HasEnoughData = (\n data: Record<string, any>,\n keys: string[],\n limit: number,\n) => {\n const numEmptyKeys = keys.filter(\n (k) =>\n Object.hasOwn(data, k) &&\n typeof data[k] === 'string' &&\n data[k].trim() === '',\n ).length;\n return numEmptyKeys < limit;\n};\n\n/**\n * Defines metadataApi service using a base URL and expected endpoints. Derived from gen3Api core API.\n *\n * @param endpoints - Defines endpoints used in discovery page\n * @param getAggMDS - Queries aggregate metadata service\n * @see https://github.com/uc-cdis/metadata-service/blob/master/docs/agg_mds.md\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Aggregate/get_aggregate_metadata_aggregate_metadata_get\n * @param getMDS - Queries normal metadata service\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Query/search_metadata_metadata_get\n * @param getIndexAggMDS - queries the Aggregate Metadata service and returns all common passed in indexKeys\n * @param getTags - Probably refering to Aggregate metadata service summary statistics query\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/metadata-service/master/docs/openapi.yaml#/Aggregate/get_aggregate_tags_aggregate_tags_get\n * @param getData - Looks like a duplicate of getMDS handler. unused in ./frontend package\n * @param getCrosswalkData - Maps ids from one source to another\n * @returns: A guppy download API for fetching bulk metadata\n */\nexport const metadataApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getAggMDS: builder.query<MetadataResponse, MetadataRequestParams>({\n query: ({ offset, pageSize }: MetadataRequestParams) => {\n return `${GEN3_MDS_API}/aggregate/metadata?flatten=true&pagination=true&offset=${offset}&limit=${pageSize}`;\n },\n transformResponse: (response: Record<string, any>, _meta, params) => {\n return {\n data: response.results.map((x: JSONObject) => {\n const objValues = Object.values(x);\n const firstValue = objValues\n ? (objValues.at(0) as JSONObject)\n : undefined;\n return firstValue ? firstValue[params.studyField] : undefined;\n }),\n hits: response.pagination.hits,\n };\n },\n }),\n getIndexAggMDS: builder.query<\n MetadataResponse,\n IndexedMetadataRequestParams\n >({\n query: ({ pageSize }: IndexedMetadataRequestParams) => {\n return `${GEN3_MDS_API}/aggregate/metadata?limit=${pageSize}`;\n },\n transformResponse: (response: Record<string, any>, _meta, params) => {\n const dataFromIndexes = params.indexKeys.reduce(\n (acc, key) => {\n if (response[key]) {\n acc.push(...response[key]);\n }\n return acc;\n },\n [] as Array<Record<string, any>>,\n );\n\n return {\n data: (\n dataFromIndexes.map((x: JSONObject) => {\n const objValues = Object.values(x);\n const objIds = Object.keys(x);\n let firstValue = objValues\n ? (objValues.at(0) as JSONObject)\n : undefined;\n\n if (params?.filterEmpty) {\n // remove any data that has < limit if defined\n if (\n firstValue &&\n !HasEnoughData(\n firstValue[params.studyField] as Record<string, any>,\n params.filterEmpty.keys,\n params.filterEmpty.limit,\n )\n )\n firstValue = undefined;\n }\n return firstValue\n ? {\n gen3MDSGUID: objIds.at(0),\n ...(firstValue[params.studyField] as Record<string, any>),\n }\n : undefined;\n }) as JSONObject[]\n ).filter((x: JSONObject | undefined) => x !== undefined),\n hits: dataFromIndexes.length,\n };\n },\n }),\n getMDS: builder.query<MetadataResponse, MetadataRequestParams>({\n query: ({ guidType, offset, pageSize }) => {\n return `${GEN3_MDS_API}/metadata?data=True&_guid_type=${guidType}&limit=${pageSize}&offset=${offset}`;\n },\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n data: Object.keys(response).map((guid) => response[guid]),\n hits: Object.keys(response).length,\n };\n },\n }),\n getTags: builder.query<Metadata, string>({\n query: () => 'tags',\n }),\n getData: builder.query<Metadata, string>({\n query: (params) => ({ url: `metadata?${params}` }),\n }),\n getMetadataById: builder.query<JSONObject, string>({\n query: (params) => ({ url: `${GEN3_MDS_API}/metadata/${params}` }),\n }),\n // TODO: Move this to own slice\n getCrosswalkData: builder.query<CrosswalkArray, CrossWalkParams>({\n queryFn: async (arg, _queryApi, _extraOptions, fetchWithBQ) => {\n const queryMultiple = async (): Promise<CrosswalkInfo[]> => {\n let result = [] as CrosswalkInfo[];\n const queue = Queue({ concurrency: 15 });\n for (const id of arg.ids) {\n queue.push(async (callback?: () => void) => {\n const response = await fetchWithBQ({\n url: `${GEN3_CROSSWALK_API}/metadata/${id}`,\n });\n\n if (response.error) {\n return { error: response.error };\n }\n\n const toData = arg.toPaths.reduce(\n (acc, path) => {\n acc[path.id] =\n JSONPath<string>({\n json: response.data as Record<string, any>,\n path: `$.[${path.dataPath}]`,\n resultType: 'value',\n })?.[0] ?? 'n/a';\n return acc;\n },\n {} as Record<string, string>,\n );\n\n result = [\n ...result,\n {\n from: id,\n to: toData,\n },\n ];\n if (callback) callback();\n\n return result;\n });\n }\n\n return new Promise((resolve, reject) => {\n queue.start((err: unknown) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n });\n };\n\n const result = await queryMultiple();\n return { data: result };\n },\n }),\n }),\n});\n\nexport const {\n useGetAggMDSQuery,\n useGetMDSQuery,\n useGetTagsQuery,\n useGetDataQuery,\n useGetMetadataByIdQuery,\n useGetCrosswalkDataQuery,\n useLazyGetCrosswalkDataQuery,\n useGetIndexAggMDSQuery,\n} = metadataApi;\n","import Queue from 'queue';\nimport { GEN3_MDS_API } from '../../constants';\nimport { fetchJSONDataFromURL, HttpMethod } from '../../utils';\n\nexport const queryMultipleMDSRecords = async (\n guids: ReadonlyArray<string>,\n useAggMDS: boolean = false,\n signal?: AbortSignal,\n): Promise<Record<string, unknown>> => {\n const result: Record<string, unknown> = {};\n const queue = Queue({ concurrency: 15 });\n for (const id of guids) {\n queue.push(async (callback?: () => void) => {\n try {\n result[id] = await fetchJSONDataFromURL(\n useAggMDS\n ? `${GEN3_MDS_API}/aggregate/metadata/guid/${id}`\n : `${GEN3_MDS_API}/metadata/${id}`,\n false,\n 'GET' as HttpMethod,\n undefined,\n signal,\n );\n\n if (callback) callback();\n\n return result;\n } catch (e: unknown) {\n return { error: e };\n }\n });\n }\n\n return new Promise((resolve, reject) => {\n queue.start((err: unknown) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n });\n};\n","export interface RemoteSupportRequest {\n subject: string;\n fullName: string;\n email: string;\n contents: string;\n}\n\nexport type RemoteSupportConfiguration = Record<string, string>;\n\nexport type RemoteSupportRequestAction = (\n requestData: RemoteSupportRequest,\n configuration: RemoteSupportConfiguration,\n) => Promise<void>;\n\nexport class MissingServiceConfigurationError extends Error {\n constructor(serviceName: string) {\n super(`Missing service configuration for ${serviceName}`);\n this.name = 'MissingServiceConfigurationError';\n }\n}\n","export interface Logger {\n warn(message: string): void;\n\n error(message: string): void;\n}\n\n// Default console logger\nexport const defaultLogger: Logger = {\n warn: (message: string) => console.warn(message),\n error: (message: string) => console.error(message),\n};\n","import {\n MissingServiceConfigurationError,\n RemoteSupportRequestAction,\n} from './types';\nimport { defaultLogger, Logger } from '../../../utils/logger';\n\nconst DefaultRemoteSupportAction: RemoteSupportRequestAction = async () => {\n throw new Error('No remote support service registered for this service name');\n};\n\nexport class RemoteSupportServiceRegistry {\n private services = new Map<string, RemoteSupportRequestAction>();\n private logger: Logger;\n\n constructor(logger: Logger = defaultLogger) {\n this.logger = logger;\n }\n\n /**\n * Register a remote support service\n * @param serviceName - Unique identifier for the service\n * @param action - The action function to execute for this service\n * @throws Error if serviceName or action is invalid\n */\n public registerService(\n serviceName: string,\n action: RemoteSupportRequestAction,\n ): void {\n if (!serviceName?.trim()) {\n throw new Error('Service name cannot be empty or null');\n }\n\n if (typeof action !== 'function') {\n throw new Error('Action must be a function');\n }\n\n if (this.services.has(serviceName)) {\n this.logger.warn(\n `Service '${serviceName}' is already registered and will be overwritten.`,\n );\n }\n\n this.services.set(serviceName, action);\n }\n\n /**\n * Get a registered service action\n * @param serviceName - The service identifier\n * @returns The registered action or default action if not found\n */\n public getSupportService(serviceName: string): RemoteSupportRequestAction {\n if (!serviceName?.trim()) {\n this.logger.error('Service name cannot be empty or null');\n return DefaultRemoteSupportAction;\n }\n\n const service = this.services.get(serviceName);\n\n if (!service) {\n this.logger.warn(\n `Service '${serviceName}' not registered. Using default action.`,\n );\n throw new MissingServiceConfigurationError(serviceName);\n }\n\n return service;\n }\n\n /**\n * Check if a service is registered\n * @param serviceName - The service identifier\n * @returns true if service is registered\n */\n public hasService(serviceName: string): boolean {\n return this.services.has(serviceName);\n }\n\n /**\n * Get all registered service names\n * @returns Array of registered service names\n */\n public getRegisteredServices(): string[] {\n return Array.from(this.services.keys());\n }\n\n /**\n * Unregister a service\n * @param serviceName - The service identifier\n * @returns true if service was removed, false if it wasn't registered\n */\n public unregisterService(serviceName: string): boolean {\n return this.services.delete(serviceName);\n }\n\n /**\n * Clear all registered services\n */\n public clear(): void {\n this.services.clear();\n }\n\n /**\n * Get the number of registered services\n */\n public size(): number {\n return this.services.size;\n }\n}\n\nlet defaultRegistryInstance: RemoteSupportServiceRegistry | null = null;\n\nexport function getRemoteSupportServiceRegistry(\n logger?: Logger,\n): RemoteSupportServiceRegistry {\n if (!defaultRegistryInstance) {\n defaultRegistryInstance = new RemoteSupportServiceRegistry(logger);\n }\n return defaultRegistryInstance;\n}\n\nexport function resetDefaultRegistry(): void {\n defaultRegistryInstance = null;\n}\n","import {\n RemoteSupportConfiguration,\n RemoteSupportRequest,\n RemoteSupportRequestAction,\n} from './types';\n\nexport const ZENDESK_MAX_SUBJECT_LENGTH = 255;\nexport const ZENDESK_DOMAIN =\n process.env.NEXT_PUBLIC_GEN3_ZENDESK_API ||\n 'https://<SUBDOMAIN_NAME>.zendesk.com';\n\nexport const createZendeskTicket: RemoteSupportRequestAction = async (\n { subject, fullName, email, contents }: RemoteSupportRequest,\n configuration: RemoteSupportConfiguration,\n) => {\n const { zendeskSubdomainName } = configuration;\n try {\n let zendeskTicketCreationURL = `${ZENDESK_DOMAIN}/api/v2/requests`;\n if (zendeskSubdomainName) {\n zendeskTicketCreationURL = zendeskTicketCreationURL.replace(\n '<SUBDOMAIN_NAME>',\n zendeskSubdomainName,\n );\n } else {\n // This is the default Gen3 helpdesk subdomain\n zendeskTicketCreationURL = zendeskTicketCreationURL.replace(\n '<SUBDOMAIN_NAME>',\n 'gen3support',\n );\n }\n let ticketSubject = subject;\n if (subject.length > ZENDESK_MAX_SUBJECT_LENGTH) {\n ticketSubject = `${subject.substring(\n 0,\n ZENDESK_MAX_SUBJECT_LENGTH - 3,\n )}...`;\n }\n await fetch(zendeskTicketCreationURL, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n request: {\n subject: ticketSubject,\n comment: {\n body: contents,\n },\n requester: {\n name: fullName,\n email,\n },\n },\n }),\n }).then((response) => {\n if (response.status !== 201) {\n throw new Error(\n `Request for create Zendesk ticket failed with status ${response.status}`,\n );\n }\n return response;\n });\n } catch (err) {\n throw new Error(`Request for create Zendesk ticket failed: ${err}`);\n }\n};\n","import { getRemoteSupportServiceRegistry } from './registeredRemoteSupportServices';\nimport { createZendeskTicket } from './zenDesk';\n\nexport const registerDefaultRemoteSupport = () => {\n const registry = getRemoteSupportServiceRegistry();\n registry.registerService('zenDesk', createZendeskTicket);\n};\n","import { gen3Api } from '../gen3';\nimport { GEN3_REQUESTOR_API } from '../../constants';\n\nexport interface RequestQueryBody {\n policy_id?: string;\n resource_display_name?: string;\n resource_id?: string;\n resource_path?: string;\n resource_paths?: string[];\n role_ids?: string[];\n status?: string;\n username?: string;\n}\n\nexport interface RequestorResponse {\n resource_display_name?: string | null;\n updated_time?: string;\n resource_id?: string;\n request_id?: string;\n username?: string;\n status?: string;\n revoke?: boolean;\n policy_id?: string;\n created_time?: string;\n}\n\nexport interface RequestListQuery {\n policy_ids: Array<string>;\n resource_ids: Array<string>;\n status: string;\n revoke: boolean;\n}\n\n/**\n * Converts a Partial<RequestListQuery> object to a URL query string\n * @param params - The parameters to convert\n * @returns A formatted query string (including the leading '?')\n */\nexport const convertToQueryString = (\n params: Partial<RequestListQuery>,\n): string | undefined => {\n if (!params || Object.keys(params).length === 0) {\n return '';\n }\n\n const queryParts: string[] = [];\n\n // Handle policy_ids array\n if (params.policy_ids && params.policy_ids.length > 0) {\n params.policy_ids.forEach((id) => {\n queryParts.push(`policy_id=${encodeURIComponent(id)}`);\n });\n }\n\n if (params.resource_ids && params.resource_ids.length > 0) {\n params.resource_ids.forEach((id) => {\n queryParts.push(`resource_id=${encodeURIComponent(id)}`);\n });\n }\n\n // Handle status\n if (params.status !== undefined) {\n queryParts.push(`status=${encodeURIComponent(params.status)}`);\n }\n\n // Handle revoke\n if (params.revoke !== undefined) {\n queryParts.push(`revoke=${params.revoke}`);\n }\n\n return queryParts.length > 0 ? `?${queryParts.join('&')}` : undefined;\n};\n\n/**\n * Defines requester service using a base URL and expected endpoints. Derived from gen3Api core API.\n *\n * @param endpoints - Defines endpoints used in discovery page\n * @param request - Queries Requestor service\n * @see https://github.com/uc-cdis/requestor?tab=readme-ov-file#requestor\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/requestor/master/docs/openapi.yaml#/Query/list_requests_request_get\n * @returns: Object of request made\n */\n\n//TODO convert snakeCase yTpes o camelCase by adding transform respomse\nexport const requestorApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n status: builder.query<RequestorResponse, RequestListQuery | void>({\n // get status of requestor service\n query: () => `${GEN3_REQUESTOR_API}/_status`,\n }),\n request: builder.query<RequestorResponse, Partial<RequestListQuery>>({\n query: (params?) => {\n const strParams = params ? convertToQueryString(params) : undefined;\n return `${GEN3_REQUESTOR_API}/request${strParams ?? ''}`;\n },\n }),\n userRequest: builder.query<\n Array<RequestorResponse>,\n Partial<RequestListQuery> | undefined\n >({\n // get a list of requests\n query: (params?) => {\n const strParams = params ? convertToQueryString(params) : undefined;\n return `${GEN3_REQUESTOR_API}/request/user${strParams ?? ''}`;\n },\n }),\n requestById: builder.query<RequestorResponse, string>({\n query: (requestId) => `${GEN3_REQUESTOR_API}/request/${requestId}`,\n }),\n createRequest: builder.mutation<RequestorResponse, RequestQueryBody>({\n query: (queryBody: RequestQueryBody) => ({\n url: `${GEN3_REQUESTOR_API}/request`,\n method: 'POST',\n credentials: 'include',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(queryBody),\n }),\n }),\n }),\n});\n\nexport const {\n useCreateRequestMutation,\n useRequestQuery,\n useLazyRequestQuery,\n useStatusQuery: useRequestorStatusQuery,\n useRequestByIdQuery,\n useUserRequestQuery,\n} = requestorApi;\n","import { gen3Api } from '../gen3';\nimport { GEN3_SOWER_API } from '../../constants';\nimport { JSONObject } from '../../types';\nimport { JobStatus } from './types';\n\nexport interface DispatchJobParams {\n action: string;\n input: JSONObject;\n}\n\nexport interface DispatchJobResponse {\n uid: string;\n name: string;\n status: string;\n}\n\ntype JobListResponse = Array<JobStatus>;\n\n/**\n * Creates a loadingStatusApi for checking the status of a sower data download job\n * @param getJobList Shows the list of jobs currently running\n * @see https://petstore.swagger.io/?url=https://raw.githubusercontent.com/uc-cdis/sower/master/openapis/openapi.yaml#/sower/list\n * @param getDownloadStatus Shows the status of a selected job\n * @returns: A sower job response dict which returns job information of file downloads\n */\nexport const loadingStatusApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getSowerJobList: builder.query<JobListResponse, void>({\n query: () => `${GEN3_SOWER_API}/list`,\n }),\n submitSowerJob: builder.mutation<DispatchJobResponse, DispatchJobParams>({\n query: (params) => ({\n url: `${GEN3_SOWER_API}/dispatch`,\n method: 'POST',\n body: params,\n }),\n }),\n getSowerJobStatus: builder.query<DispatchJobResponse, string>({\n query: (uid) => `${GEN3_SOWER_API}/status?UID=${uid}`,\n }),\n getSowerOutput: builder.query<DispatchJobResponse, string>({\n query: (uid) => `${GEN3_SOWER_API}/output?UID=${uid}`,\n }),\n getSowerServiceStatus: builder.query<JSON, void>({\n query: () => `${GEN3_SOWER_API}/_status`,\n }),\n }),\n});\n\nexport const {\n useGetSowerJobListQuery,\n useLazyGetSowerJobListQuery,\n useSubmitSowerJobMutation,\n useGetSowerJobStatusQuery,\n useGetSowerOutputQuery,\n useGetSowerServiceStatusQuery,\n} = loadingStatusApi;\n","import { AuthzMapping } from '../authz';\n\nexport const resourcePathFromProjectID = (projectID: string): string => {\n const split = projectID.split('-');\n const program = split[0];\n const project = split.slice(1).join('-');\n const resourcePath = ['/programs', program, 'projects', project].join('/');\n return resourcePath;\n};\n\nexport const isRootUrl = (urlFragment: string): boolean =>\n urlFragment === '_root';\n\nexport const isProgramUrl = (urlFragment: string): boolean =>\n urlFragment !== '_root' && !urlFragment.includes('-');\n\nexport const userHasSheepdogProgramAdmin = (\n userAuthMapping: Record<string, any> = {},\n): boolean =>\n userAuthMapping['/services/sheepdog/submission/program'] !== undefined;\n\nexport const userHasSheepdogProjectAdmin = (\n userAuthMapping: Record<string, any> = {},\n): boolean =>\n userAuthMapping['/services/sheepdog/submission/project'] !== undefined;\n\nexport const projectCodeFromResourcePath = (resourcePath: string): string => {\n const split = resourcePath.split('/');\n return split.length < 5 || split[1] !== 'programs' || split[3] !== 'projects'\n ? ''\n : split[4];\n};\n\nexport const listifyMethodsFromMapping = (\n actions: { service: string; method: string }[],\n): string[] => {\n const reducer = (\n accumulator: string[],\n currval: { service: string; method: string },\n ): string[] => accumulator.concat([currval.method]);\n return actions.reduce(reducer, []);\n};\n\nexport const userHasDataUpload = (\n userAuthMapping: AuthzMapping = {},\n): boolean => {\n const actionIsFileUpload = (x: { method: string }): boolean =>\n x.method === 'file_upload';\n const resource = userAuthMapping['/data_file'];\n return resource !== undefined && resource.some(actionIsFileUpload);\n};\n\nexport const userHasMethodForServiceOnResource = (\n method: string,\n service: string,\n resourcePath: string,\n userAuthMapping: AuthzMapping = {},\n): boolean => {\n const actions = userAuthMapping[resourcePath];\n return (\n actions !== undefined &&\n actions.some(\n (x: { service: string; method: string }) =>\n (x.service === service || x.service === '*') &&\n (x.method === method || x.method === '*'),\n )\n );\n};\n\nexport const userHasMethodForServiceOnProject = (\n method: string,\n service: string,\n projectID: string,\n userAuthMapping: AuthzMapping = {},\n): boolean => {\n const resourcePath = resourcePathFromProjectID(projectID);\n return userHasMethodForServiceOnResource(\n method,\n service,\n resourcePath,\n userAuthMapping,\n );\n};\n\nexport const userHasMethodOnAnyProject = (\n method: string,\n userAuthMapping: AuthzMapping = {},\n): boolean => {\n const actionHasMethod = (x: { method: string }): boolean =>\n x.method === method;\n const actionArrays = Object.values(userAuthMapping);\n const hasMethod = actionArrays.some((x: { method: string }[]) =>\n x.some(actionHasMethod),\n );\n return hasMethod;\n};\n\nexport const userHasCreateOrUpdateOnAnyProject = (\n userAuthMapping: AuthzMapping = {},\n): boolean =>\n userHasMethodOnAnyProject('create', userAuthMapping) ||\n userHasMethodOnAnyProject('update', userAuthMapping);\n","import { gen3Api } from '../gen3';\nimport { GEN3_SUBMISSION_API } from '../../constants';\nimport {\n Project,\n ProjectResponse,\n ProjectsListRequestParams,\n SubmissionInfo,\n SubmissionGraphqlParams,\n SubmissionGraphqlResponse,\n} from './types';\nimport { JSONObject } from '../../types';\nimport { extractValuesFromObject } from '../../utils/extractvalues';\nimport type { FetchBaseQueryError } from '@reduxjs/toolkit/query';\n\ninterface ProjectFetchQueryResponse {\n data: {\n data: {\n project: Array<Project>;\n };\n };\n}\n\n/**\n * Project details from the project query\n */\ninterface ProjectInfoFromProjectDetails {\n name: string;\n id: string;\n code: string;\n}\n\ninterface ProjectDetailsResponse\n extends Record<\n string,\n string | number | Array<ProjectInfoFromProjectDetails>\n > {\n project: Array<ProjectInfoFromProjectDetails>;\n}\n\ninterface ProjectDetailsFetchQueryResponse {\n data: {\n data: ProjectDetailsResponse;\n };\n}\n\n/**\n * Project details results a list of project details\n * and the project information\n */\ninterface ProjectDetailsResults {\n [key: string]: string | number | ProjectInfoFromProjectDetails;\n project: ProjectInfoFromProjectDetails;\n}\n\nexport interface ProjectDetailsQueryResponse {\n details: ProjectDetailsResults[];\n hits: number;\n}\n\ninterface SubmissionQueryResponse {\n transactionList: SubmissionInfo[];\n}\n\nconst SubmissionGraphqlQuery = `query transactionList {\n transactionList: transaction_log(last: 20) {\n id\n submitter\n project_id\n created_datetime\n documents {\n doc_size\n doc\n id\n }\n state\n }\n}`;\n\n/**\n * Defines submissionApi service using a base URL and expected endpoints. Derived from gen3Api core API.\n * @param endpoints - Defines endpoints used in submission page\n * @param getProjects - Queries the list of projects\n * @param getProjectsDetails - Queries the list of projects and their details\n * @param getSubmissionGraphQL - Queries the submission graphql with a query and variables\n * @returns: A submission API for fetching project details\n */\nexport const submissionApi = gen3Api.injectEndpoints({\n endpoints: (builder) => ({\n getProjects: builder.query<ProjectResponse, JSONObject>({\n query: (graphQLParams) => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(graphQLParams),\n }),\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n projects: response.data.project,\n };\n },\n }),\n getSubmissions: builder.query<SubmissionQueryResponse, void>({\n query: () => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n query: SubmissionGraphqlQuery,\n }),\n }),\n transformResponse: (response: Record<string, any>, _meta) => {\n return {\n transactionList: response.data.transactionList,\n };\n },\n }),\n getProjectsDetails: builder.query<\n ProjectDetailsQueryResponse,\n ProjectsListRequestParams\n >({\n async queryFn(args, _queryApi, _extraOptions, fetchWithBQ) {\n // get the list of projects\n const projectsResponse = await fetchWithBQ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify(args.projectQuery),\n });\n if (projectsResponse.error)\n return { error: projectsResponse.error as FetchBaseQueryError };\n\n const projects = (projectsResponse as ProjectFetchQueryResponse)?.data\n .data.project;\n const projectIds = projects.map((p) => p.project_id);\n\n // given the list of projects, get all of them by executing the projectDetailsQuery for each project\n const projectDetails = await Promise.all(\n projectIds.map(async (projectId) => {\n const result = await fetchWithBQ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n ...args.projectDetailsQuery,\n variables: {\n name: projectId,\n },\n }),\n });\n const { project, ...values } = (\n result as ProjectDetailsFetchQueryResponse\n ).data.data;\n\n return result.data\n ? {\n data: args.mapping\n ? ({\n ...extractValuesFromObject(\n args.mapping,\n values as JSONObject,\n ),\n project: project[0],\n } as ProjectDetailsResults)\n : ({\n ...values,\n project: project[0],\n } as ProjectDetailsResults),\n }\n : { error: result.error };\n }),\n );\n\n // if any of the projectDetails has an error, return the error\n if (projectDetails.some((detail) => 'error' in detail)) {\n return {\n error: projectDetails.find(\n (detail) => 'error' in detail,\n ) as FetchBaseQueryError,\n };\n } else\n return {\n data: {\n details: projectDetails.reduce((acc, detail) => {\n acc.push(\n detail.data ?? {\n project: {\n name: '',\n id: '',\n code: '',\n },\n },\n );\n return acc;\n }, [] as ProjectDetailsResults[]),\n hits: projectIds.length, // TODO this needs to be changed to show the total number of projects\n },\n };\n },\n }),\n getSubmissionGraphQL: builder.query<\n SubmissionGraphqlResponse,\n SubmissionGraphqlParams\n >({\n query: (graphQLParams) => ({\n url: `${GEN3_SUBMISSION_API}/graphql`,\n method: 'POST',\n credentials: 'include',\n body: JSON.stringify({\n query: graphQLParams.query,\n ...(graphQLParams.variables\n ? { variables: graphQLParams.variables }\n : {}),\n }),\n }),\n transformResponse: (response: Record<string, any>, _meta, params) => {\n if (params.mapping) {\n return {\n data: extractValuesFromObject(params.mapping, response.data),\n };\n }\n return response.data;\n },\n }),\n getDictionary: builder.query<SubmissionGraphqlResponse, void>({\n query: () => ({\n url: `${GEN3_SUBMISSION_API}/_dictionary/_all/`,\n }),\n }),\n }),\n});\n\nexport const {\n useGetProjectsQuery,\n useGetSubmissionGraphQLQuery,\n useGetProjectsDetailsQuery,\n useLazyGetProjectsQuery,\n useLazyGetSubmissionGraphQLQuery,\n useGetSubmissionsQuery,\n useGetDictionaryQuery,\n} = submissionApi;\n","import { gen3Api } from '../gen3';\nimport { GEN3_WORKSPACE_API } from '../../constants';\nimport {\n PayModel,\n PodStatus,\n WorkspaceInfo,\n WorkspaceInfoResponse,\n WorkspaceOptions,\n WorkspaceOptionsResponse,\n WorkspacePayModelResponse,\n WorkspaceStatus,\n WorkspaceStatusResponse,\n} from './types';\nimport { selectActiveWorkspaceStatus } from './workspaceSlice';\nimport { CoreState } from '../../reducers';\nimport { isFetchParseError, isHttpStatusError } from '../../types';\nimport { createSelector } from '@reduxjs/toolkit';\n\ninterface WorkspacePayModelRawResponse {\n current_pay_model: PayModel;\n all_pay_models: Array<PayModel>;\n}\n\nconst WorkspaceWithTags = gen3Api.enhanceEndpoints({\n addTagTypes: ['Workspace', 'PayModel'],\n});\n\nexport const EmptyWorkspaceStatusResponse: WorkspaceStatusResponse = {\n status: WorkspaceStatus.NotFound,\n conditions: [],\n containerStates: [],\n idleTimeLimit: 0,\n lastActivityTime: 0,\n workspaceType: '',\n};\n\nexport const workspacesApi = WorkspaceWithTags.injectEndpoints({\n endpoints: (builder) =>\n ({\n getWorkspaceOptions: builder.query<WorkspaceOptions, void>({\n query: () => `${GEN3_WORKSPACE_API}/options`,\n transformResponse: (response: WorkspaceOptionsResponse) => {\n return response.map((workspace: WorkspaceInfoResponse) => {\n return {\n id: workspace.id,\n name: workspace.name,\n idleTimeLimit: workspace['idle-time-limit'],\n memoryLimit: workspace['memory-limit'],\n cpuLimit: workspace['cpu-limit'],\n } as WorkspaceInfo;\n });\n },\n }),\n getWorkspacePayModels: builder.query<WorkspacePayModelResponse, void>({\n query: () => `${GEN3_WORKSPACE_API}/allpaymodels`,\n providesTags: ['PayModel'],\n transformResponse: (response: WorkspacePayModelRawResponse) => {\n return {\n currentPayModel: response.current_pay_model,\n allPayModels: response.all_pay_models,\n noPayModel: false,\n };\n },\n }),\n getActivePayModel: builder.query<PayModel, void>({\n query: () => `${GEN3_WORKSPACE_API}/paymodels`,\n providesTags: ['PayModel'],\n }),\n setCurrentPayModel: builder.mutation<void, string>({\n query: (id: string) => ({\n url: `${GEN3_WORKSPACE_API}/setpaymodel`,\n method: 'POST',\n body: id,\n invalidatesTags: ['PayModel'],\n }),\n }),\n getWorkspaceStatus: builder.query<WorkspaceStatusResponse, void>({\n queryFn: async (_arg0, queryApi, _extraOptions, fetchWithBQ) => {\n const currentWorkspaceStatus = selectActiveWorkspaceStatus(\n queryApi.getState() as CoreState,\n );\n\n const workspaceStatus = await fetchWithBQ(\n `${GEN3_WORKSPACE_API}/status`,\n );\n if (workspaceStatus.error) {\n return workspaceStatus;\n }\n\n // TODO: Find out IF this is code is required\n const workspaceStatusData =\n workspaceStatus.data as unknown as WorkspaceStatusResponse;\n\n if (\n workspaceStatusData.status === WorkspaceStatus.Running &&\n (currentWorkspaceStatus === 'Not Found' ||\n currentWorkspaceStatus === 'Launching')\n ) {\n const proxyStatus = await fetchWithBQ(\n `${GEN3_WORKSPACE_API}/proxy/`,\n );\n let statusError = undefined;\n if (isFetchParseError(proxyStatus.error)) {\n statusError = proxyStatus.error.originalStatus;\n }\n\n if (isHttpStatusError(proxyStatus.error)) {\n statusError = proxyStatus.error.status;\n }\n\n if (statusError && statusError !== 200) {\n return {\n data: {\n ...workspaceStatusData,\n status: WorkspaceStatus.Launching,\n conditions: [\n {\n type: 'ProxyConnected',\n status: PodStatus.False,\n },\n ],\n } as WorkspaceStatusResponse,\n };\n }\n }\n return { data: workspaceStatus.data as WorkspaceStatusResponse };\n },\n providesTags: ['Workspace'],\n }),\n launchWorkspace: builder.mutation<boolean, string>({\n query: (id) => {\n return {\n url: `${GEN3_WORKSPACE_API}/launch?id=${id}`,\n method: 'POST',\n invalidatesTags: ['Workspace'],\n responseHandler: (response) => response.text(),\n };\n },\n transformResponse: async (response: string) => {\n return !!(response && response === 'Success');\n },\n }),\n terminateWorkspace: builder.mutation<void, void>({\n query: () => ({\n url: `${GEN3_WORKSPACE_API}/terminate`,\n method: 'POST',\n invalidatesTags: ['Workspace'],\n responseHandler: (response) => response.text(),\n }),\n }),\n }) as const,\n});\n\nexport const {\n useGetWorkspaceOptionsQuery,\n useGetWorkspacePayModelsQuery,\n useGetWorkspaceStatusQuery,\n useGetActivePayModelQuery,\n useSetCurrentPayModelMutation,\n useLaunchWorkspaceMutation,\n useTerminateWorkspaceMutation,\n} = workspacesApi;\n\nexport const workspaceStatusSelector =\n workspacesApi.endpoints.getWorkspaceStatus.select();\n\nexport const selectWorkspaceStatusFromService = createSelector(\n workspaceStatusSelector,\n (status) =>\n status.data ?? {\n ...EmptyWorkspaceStatusResponse,\n },\n);\n\nexport const selectWorkspaceStatus = createSelector(\n workspaceStatusSelector,\n (status) => status?.data?.status ?? WorkspaceStatus.NotFound,\n);\n\nexport const paymodelStatusSelector =\n workspacesApi.endpoints.getWorkspacePayModels.select();\n\nexport const selectPaymodelStatus = createSelector(\n paymodelStatusSelector,\n (status) => status,\n);\n","import { WorkspaceStatus } from './types';\n\nexport const isWorkspaceActive = (status: WorkspaceStatus) =>\n status === WorkspaceStatus.Running ||\n status === WorkspaceStatus.Launching ||\n status === WorkspaceStatus.Terminating;\n\nexport const isWorkspaceRunningOrStopping = (status: WorkspaceStatus) =>\n status === WorkspaceStatus.Running || status === WorkspaceStatus.Terminating;\n","export type RegistryTypes = string | number | boolean;\n\nclass ConfigRegistry<T = Record<string, RegistryTypes>> {\n private config: T | null = null;\n\n init(config: T): void {\n if (this.config !== null) {\n console.warn('Gen3ConfigRegistry already initialized');\n return;\n }\n\n this.config = Object.freeze({ ...config });\n }\n\n get<K extends keyof T>(key: K): T[K] {\n if (!this.config) {\n throw new Error('ConfigRegistry not initialized');\n }\n return this.config[key];\n }\n\n getAll(): Readonly<T> {\n if (!this.config) {\n throw new Error('ConfigRegistry not initialized');\n }\n return this.config;\n }\n}\n\nexport const configRegistry = new ConfigRegistry();\n"],"names":["GEN3_COMMONS_NAME","process","env","NEXT_PUBLIC_GEN3_COMMONS_NAME","GEN3_API","NEXT_PUBLIC_GEN3_API","GEN3_DOMAIN","NEXT_PUBLIC_GEN3_DOMAIN","GUID_PREFIX_PATTERN","GEN3_GUPPY_API","NEXT_PUBLIC_GEN3_GUPPY_API","GEN3_MDS_API","NEXT_PUBLIC_GEN3_MDS_API","GEN3_DOWNLOADS_ENDPOINT","NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT","GEN3_FENCE_API","NEXT_PUBLIC_GEN3_FENCE_API","GEN3_FENCE_SERVICE","GEN3_AI_SEARCH_API","NEXT_PUBLIC_GEN3_AI_SEARCH_API","GEN3_AUTHZ_API","NEXT_PUBLIC_GEN3_AUTHZ_API","GEN3_AUTHZ_SERVICE","GEN3_REDIRECT_URL","NEXT_PUBLIC_GEN3_REDIRECT_URL","GEN3_WORKSPACE_API","NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API","GEN3_SUBMISSION_API","NEXT_PUBLIC_GEN3_SUBMISSION_API","GEN3_WTS_API","NEXT_PUBLIC_GEN3_WTS_API","GEN3_DATA_LIBRARY_API","NEXT_PUBLIC_GEN3_DATA_LIBRARY_API","GEN3_CROSSWALK_API","NEXT_PUBLIC_GEN3_CROSSWALK_API","GEN3_SOWER_API","NEXT_PUBLIC_GEN3_SOWER_API","GEN3_MANIFEST_API","NEXT_PUBLIC_GEN3_MANIFEST_API","GEN3_REQUESTOR_API","NEXT_PUBLIC_GEN3_REQUESTOR_API","Accessibility","FILE_FORMATS","JSON","TSV","CSV","FILE_DELIMITERS","tsv","csv","CART_LIMIT","isFetchError","obj","url","status","statusText","text","buildFetchError","res","request","fetchFence","endpoint","headers","body","method","isJSON","useService","fetch","credentials","stringify","ok","data","json","userAuthApi","createApi","reducerPath","refetchOnMountOrArgChange","refetchOnReconnect","baseQuery","getState","results","csrfToken","selectCSRFToken","accessToken","undefined","NODE_ENV","getCookie","Accept","Authorization","_e","endpoints","builder","fetchUserDetails","query","transformResponse","response","loginStatus","username","getCSRF","queryFn","jsonData","token","csrf","error","Error","message","EMPTY_USER","useFetchUserDetailsQuery","useLazyFetchUserDetailsQuery","useGetCSRFQuery","useLazyGetCSRFQuery","userAuthApiMiddleware","middleware","userAuthApiReducerPath","userAuthApiReducer","reducer","selectUserDetailsFromState","select","selectUserDetails","createSelector","userDetails","selectUserAuthStatus","userLoginState","QueryStatus","pending","uninitialized","selectCSRFTokenData","passThroughTheState","state","selectHeadersWithCSRFToken","gen3Api","fetchBaseQuery","baseUrl","prepareHeaders","set","validateStatus","gen3ServicesReducer","gen3ServicesReducerMiddleware","useCoreSelector","useSelector","withTypes","useCoreDispatch","useDispatch","fetchUserState","createAsyncThunk","_","meta","isAuthenticated","isPending","initialState","slice","createSlice","name","reducers","resetUserState","extraReducers","addCase","fulfilled","action","payload","rejected","userReducer","actions","selectUserData","user","selectUser","selectUserLoginStatus","useIsUserLoggedIn","useUserAuth","renew","coreDispatch","useEffect","isUninitialized","isFetching","isSuccess","isError","REGISTRY","registerGen3App","id","gen3App","lookupGen3App","gen3Apps","addGen3AppMetadata","requiredEntityTypes","gen3AppReducer","selectGen3AppMetadataByName","appName","selectGen3AppByName","setDRSHostnames","_state","drsHostnamesReducer","drsHostnamesSelector","drsHostnames","Modals","currentModal","showModal","modal","hideModal","modalReducer","selectCurrentModal","modals","selectCurrentMessage","WorkspaceStatus","RequestedWorkspaceStatus","PodConditionType","PodStatus","getCurrentTimestamp","Date","now","getTimeDifferenceMs","startTime","endTime","isTimeGreaterThan","minutes","diffMs","diffMinutes","getTimestamp","toLocaleString","NO_WORKSPACE_ID","NotFound","requestedStatus","Unset","requestedStatusTimestamp","setActiveWorkspaceId","clearActiveWorkspaceId","setActiveWorkspaceStatus","setRequestedWorkspaceStatus","setActiveWorkspace","activeWorkspaceReducer","selectActiveWorkspaceId","activeWorkspace","selectActiveWorkspaceStatus","selectRequestedWorkspaceStatus","selectRequestedWorkspaceStatusTimestamp","cartAdapter","createEntityAdapter","selectId","item","getInitialState","cartSlice","addItemsToCart","addMany","removeItemsFromCart","removeMany","cartReducer","selectById","selectCartItem","selectIds","selectCartItems","selectAll","selectCart","selectTotal","selectCartCount","getSelectors","cart","cartReducerPath","externalLoginApi","injectEndpoints","getExternalLogins","isExternalConnected","idp","useGetExternalLoginsQuery","useLazyGetExternalLoginsQuery","useLazyIsExternalConnectedQuery","useIsExternalConnectedQuery","ResolveDRSError","resolveDRSWithDataGUISOrg","guidsForHostnameResolution","INVALID_INPUT_ERROR","RESOLVE_DRS_ERROR","Array","isArray","every","guid","responses","Promise","allSettled","map","reduce","acc","index","value","resolveCachedDRS","coreStore","resolvedIds","hostname","DRS_Resolvers","dataGUISOrg","cached","resolveDRSObjectId","resolver","isNotDefined","x","isObject","isString","prepareUrl","apiUrl","URL","HttpMethod","DEFAULT_METHOD","CONTENT_TYPE_HEADER","CONTENT_TYPE_JSON","HTTPErrorMessages","HTTPError","responseData","fetchFencePresignedURL","onAbort","signal","Headers","errorMessage","errorData","getCSRFToken","requestHeaders","fetchJSONDataFromURL","requiresCSRF","includes","toUpperCase","errorBody","extractValuesFromObject","jsonPathMappings","result","extractObjectValue","jsonPath","extractedValues","JSONPath","path","length","key","Object","keys","ExtractValueFromObject","valueIfNotFound","DAYS_IN_YEAR","convertToHistogramDataAsStringKey","count","calculatePercentageAsNumber","total","calculatePercentageAsString","toFixed","capitalize","original","customCapitalizations","uuid","dna","dbsnp","cosmic","civic","dbgap","ecog","bmi","gdc","cnv","ssm","aa","split","word","toLowerCase","charAt","join","humanify","term","cap","facetTerm","humanified","replace","trim","ageDisplay","ageInDays","yearsOnly","defaultValue","calculateYearsAndDays","years","days","ABS_AGE_DAYS","Math","abs","remainingDays","floor","ceil","formattedYears","formattedDays","ageString","filter","Boolean","stringifyJSONParam","defaults","queryWTSFederatedLoginStatus","GET","providers","gatherGUIDPrefixes","selectedFiles","selectedFile","object_id","guidDomainPrefix","match","shift","push","resolveDRSPrefixes","guidPrefixes","resolveGUIDsInSelectedFiles","externalHosts","resolvedFiles","unresolvedFiles","resolvedDRSPrefixes","unresolvedIds","forEach","drsPrefix","fetchExternalLogins","externalProviders","unauthenticatedProviders","provider","refresh_token_expiration","guidResolutions","providersToAuthenticate","unauthenticatedProvider","values","base_url","missingProviders","useGetFederatedLoginStatus","wtsResults","isLoading","wstIsLoading","wtsError","setResult","useState","fetchData","getFederatedLoginStatus","guppyApi","api","errors","locations","e","GraphQLError","guppyAPISliceMiddleware","guppyApiSliceReducerPath","guppyApiReducer","isFilterSet","input","root","mode","isIncludes","o","operator","isUnion","operands","isIntersection","isIntersectionOrUnion","isOperandsType","operation","ifOperationWithField","field","isNestedFilter","isIndexedFilterSetEmpty","filters","filterSet","EmptyFilterSet","isOperationWithField","isOperatorWithFieldAndArrayOfOperands","extractFilterValue","op","valueExtractorHandler","ValueExtractorHandler","handleOperation","extractEnumFilterValue","enumValueExtractorHandler","EnumValueExtractorHandler","assertNever","handler","handleEquals","handleNotEquals","handleLessThan","handleLessThanOrEquals","handleGreaterThan","handleGreaterThanOrEquals","handleIntersection","handleUnion","handleNestedFilter","handleIncludes","handleExcludeIfAny","handleExcludes","handleExists","handleMissing","isFilterEmpty","fs","isEqual","isGQLIntersection","and","isGQLUnion","or","ToGqlHandler","operand","in","exclude","excludeifany","convertFilterToGqlFilter","is","not","child","nested","convertFilterSetToGqlFilter","toplevelOp","fsKeys","handleGqlOperation","operationKeys","convertGqlFilterToFilter","gqlFilter","ToOperationHandler","entries","_arg","appendFilterToOperation","addition","filterSetToOperation","k","buildNestedGQLFilter","leafOperand","parentPath","splitFieldArray","nextField","console","warn","currentPath","buildNestedFilterForOperation","FieldNameOverrides","gender","Gender","COMMON_PREPOSITIONS","s","trimFirstFieldNameToTitle","fieldName","source","indexOf","fieldNameToTitle","sections","flat","extractIndexFromFullFieldName","prependIndexToFieldName","extractFieldNameFromFullFieldName","extractIndexAndFieldNameFromFullFieldName","rest","defaultCohortNameGenerator","timeZone","hour12","isNameUnique","entities","excludeId","trimmedName","some","cohort","generateUniqueName","baseName","trimmedBaseName","counter","uniqueName","extractFiltersWithPrefixFromFilterSet","prefix","startsWith","DEFAULT_COHORT_NAME","newCohort","customName","ts","toISOString","newName","newId","createCohortId","modified","saved","createdDatetime","modifiedDatetime","counts","nanoid","customAlphabet","cohortsAdapter","sortComparer","a","b","initialCohort","emptyInitialState","currentCohortId","setOne","getCurrentCohortId","cohortManagerSlice","createNewCohort","addOne","setAsCurrent","updateCohortName","updateOne","changes","removeCohort","cohortId","removedCohortName","totalCohorts","removeAll","defaultCohort","shouldShowMessage","removeOne","remainingIds","updateCohortFilter","setCohortFilter","setCohortIndexFilters","removeCohortFilter","_a","updated","duplicateCohort","currentCohort","duplicatedCohort","clearCohortFilters","updateCohortCounts","updateCohortIndexCountById","setCurrentCohortId","setCohortList","ids","upsertMany","cohortSelectors","cohorts","cohortManager","cohortReducer","expandSlice","toggleCohortBuilderCategoryFilter","expanded","toggleCohortBuilderAllFilters","expand","cohortBuilderFiltersExpandedReducer","selectCohortFilterExpanded","filtersExpanded","selectAllCohortFiltersCollapsed","setCohortFilterCombineMode","cohortBuilderFiltersCombineModeReducer","selectCohortFilterCombineMode","filtersCombineMode","shouldShareFilters","sharedFiltersMap","cohortSharedFiltersSlice","setShouldShareFilters","setSharedFilters","selectShouldShareFilters","sharedFilters","selectSharedFilters","selectSharedFiltersForFields","cohortSharedFiltersReducer","cohortReducers","combineReducers","rootReducer","gen3Services","flattenJson","flattenedJson","flatten","delimiter","conversion","config","Papa","unparse","jsonToFormat","format","flatJson","isHistogramRangeData","isJSONObject","isJSONValue","isJSONValueArray","isValidObject","isHistogramData","isHistogramDataArray","histogram","isHistogramDataCollection","isGuppyAggregationData","isHistogramDataAnEnum","isStatsValue","numericFields","percentiles","pObj","requiredPercentiles","p","isStatsValuesArray","isHistogramDataAArray","isHistogramDataArrayAnEnum","isHistogramDataArrayARange","isFetchBaseQueryError","isErrorWithMessage","isHttpStatusError","isFetchParseError","prepareFetchConfig","parameters","type","accessibility","fields","sort","downloadFromGuppyToBlob","onStart","onDone","onError","fetchConfig","toString","then","rootPath","resultType","str","convertedData","Blob","blob","catch","downloadJSONDataFromGuppy","groupSharedFields","reverseIndex","rootKey","Set","add","indexSet","size","from","processHistogramResponse","valueData","pointerData","element","idx","roundHistogramResponse","origData","minValue","histogramData","customQueryStrForField","depth","indent","repeat","splittedFieldArray","splittedField","histogramQueryStrForEachField","statsQueryStrForEachField","nestedHistogramQueryStrForEachField","mainField","numericAggAsText","rawDataQueryStrForEachField","splitField","convertNumericFromToArrayToFilters","range","isNested","to","asTextHistogram","middleQuery","buildAliasedNestedCountsQuery","rangeName","dataParams","dataTypeLine","processedFields","buildRangeFilters","ranges","rangeBaseName","rangeValue","buildRangeQuery","indexPrefix","rangeFilters","rangeKey","rangeQuery","selectAllCohorts","selectTotalCohorts","selectCohortById","selectCohortIds","getCurrentCohortFromCoreState","selectCohortFilters","selectCurrentCohortFilters","selectCurrentCohortId","selectCurrentCohort","selectCurrentCohortName","selectIndexedFilterByName","selectAvailableCohorts","selectCurrentCohortModified","selectCurrentCohortSaved","selectAvailableCohortByName","find","selectIndexFilters","ToGqlAllNested","leafField","at","convertFilterToNestedGqlFilter","convertFilterSetToNestedGqlFilter","statusEndpoint","fetchJson","useGetStatus","fetcher","useSWR","explorerTags","enhanceEndpoints","addTagTypes","explorerApi","getAllFieldsForType","_meta","params","getAccessibleData","fieldParts","getRawDataAndTotalCounts","offset","ALL","filterName","queryLine","typeAggsLine","variables","transformErrorResponse","_aggregation","args","containsDots","f","containsDotsUniqueBase","partsArr","basePart","tempResponse","tempItem","i","subRows","hasOwn","providesTags","getAggs","filterSelf","buildGetAggregationQuery","buckets","_totalCount","getStatsAggregations","queryId","buildGetStatsAggregationQuery","getSubAggs","termsFields","missingFields","nestedAggFields","getCounts","gqlFilters","getFieldCountSummary","getFieldsForIndex","getSharedFieldsForIndex","indices","customRange","queryData","generalGQL","useGetArrayTypes","useGetIndexFields","useGetFieldsForIndexQuery","queryStart","queryBody","useGetRawDataAndTotalCountsQuery","useGetAccessibleDataQuery","useGetAllFieldsForTypeQuery","useGetAggsQuery","useLazyGetAggsQuery","useGetStatsAggregationsQuery","useLazyGetStatsAggregationsQuery","useGetSubAggsQuery","useGetCountsQuery","useLazyGetCountsQuery","useGetFieldCountSummaryQuery","useGetSharedFieldsForIndexQuery","useGeneralGQLQuery","useLazyGeneralGQLQuery","useCustomRangeQuery","useLazyCustomRangeQuery","coreStoreListenerMiddleware","createListenerMiddleware","startCoreListening","startListening","matcher","isAnyOf","matchFulfilled","effect","listenerApi","arg","originalArgs","dispatch","createNoopStorage","getItem","_key","resolve","setItem","removeItem","storage","window","createWebStorage","fetchArboristResources","resources","persistConfig","version","whitelist","persistedReducer","persistReducer","setupCoreStore","preloadedState","configureStore","getDefaultMiddleware","serializableCheck","ignoredActions","FLUSH","REHYDRATE","PAUSE","PERSIST","PURGE","REGISTER","concat","prepend","setupListeners","persistor","persistStore","CoreProvider","children","Provider","store","PersistGate","loading","usePrevious","ref","useRef","current","createUseCoreDataHook","fetchDataActionCreator","dataSelector","prevParams","aiSearchApi","askQuestion","mutation","searchParams","topic","conversationId","conversation_id","documents","getAISearchStatus","getAISearchVersion","useAskQuestionMutation","useGetAISearchStatusQuery","useGetAISearchVersionQuery","TAGS","authzTags","authzApi","getAuthzMappings","getAuthzResources","createAuthzResource","invalidatesTags","useGetAuthzMappingsQuery","useLazyGetAuthzMappingsQuery","useGetAuthzResourcesQuery","useLazyGetAuthzResourcesQuery","useCreateAuthzResourceMutation","selectAuthzMapping","selectAuthzMappingData","authzMapping","mappings","CohortStorage","databaseName","storeName","schemaVersion","getDb","openDB","upgrade","db","objectStoreNames","contains","createObjectStore","keyPath","saveCohort","tx","transaction","objectStore","put","done","_error","saveCohorts","all","getCohort","get","getAllCohorts","savedCohorts","getAll","searchCohortsByName","searchTerm","allCohorts","searchLower","getCohortCount","updateCohort","existing","timestamp","deleteCohort","delete","deleteAllCohorts","clear","cohortExists","exportCohorts","importCohorts","overwrite","close","isFileItem","isAdditionalDataItem","itemType","isCohortItem","isDatalistAPI","created_time","updated_time","authz","items","isDataLibraryAPIResponse","lists","DataLibraryStoreMode","processItem","description","documentationUrl","buildListItemsGroupedByDataset","listData","cohortData","schema_version","dataset_guid","members","BuildList","listId","BuildLists","list","getNumberOfItemsInDatalist","dataList","fileCount","flattenDataList","convertDatasetOrCohortToLibraryListItemsAPI","datasetId","memberId","memberData","convertDataLibraryToDataLibraryAPI","dataLibrary","extractIndexFromDataLibraryCohort","parsedQuery","parse","aggregationField","definitions","def","kind","flatMap","selectionSet","selections","sel","indexField","extractFileDatasetsInRecords","dataFieldMapping","resource","dataObjects","dataObjectField","datasetIdField","datafiles","dataAcc","dataObject","fileId","dataObjectIdField","dataObjectNameField","dataObjectSizeField","sizeString","md5Sum","dataObjectMd5sumField","dataObjectUrlField","fileType","dataObjectFileTypeValue","dataObjectFileTypeField","md5sum","DATABASE_NAME","STORE_NAME","LocalStorageService","getList","getLists","listMap","datalists","addList","creator","updateList","update","deleteList","clearLists","cacheLists","allLists","cacheList","setAllLists","fetchFromDataLibraryAPI","detail","responseFromMutation","responseReceived","APIStorageService","apiBaseUrl","pendingRequests","Map","dedupedRequest","requestKey","has","requestPromise","PUT","DELETE","POST","CachedAPIService","localStorageDataLibrary","apiDataLibrary","apiResults","getCachedLists","cacheResults","DataLibraryStorageService","ApiOnly","storageService","ApiAndLocal","setStorageMode","EMPTY_LIST","DEFAULT_LIST_NAME","useDataLibrary","options","storageMode","setIsLoading","isUpdating","setIsUpdating","setError","setLists","hasInitializedRef","refreshLists","useCallback","applyOperationResult","runOperation","updatingId","createUniqueListName","preferredName","existingNames","candidate","initialize","addListToDataLibrary","apiItems","updateListInDataLibrary","flattened","deleteListFromDataLibrary","clearLibrary","setAllListsInDataLibrary","flattenedLists","getDatalist","useDeepCompareMemo","loginProvidersApi","getLoginProviders","getDownload","getPresignedUrl","what","useGetLoginProvidersQuery","useGetDownloadQuery","useLazyGetDownloadQuery","useGetPresignedUrlQuery","useLazyGetPresignedUrlQuery","logoutFence","redirect","credentialsWithTags","credentialsApi","getCredentials","addNewCredential","scope","removeCredential","authorizeFromCredentials","api_key","key_id","useGetCredentialsQuery","useAddNewCredentialMutation","useRemoveCredentialMutation","useAuthorizeFromCredentialsMutation","jwtApi","getJWKKeys","useGetJWKKeysQuery","GEN3_APP_NAMESPACE","getGen3AppId","nameVersion","uuidv5","createGen3App","App","Gen3AppWrapper","props","document","title","createAppStore","devTools","context","React","createContext","useAppSelector","createSelectorHook","useAppDispatch","createDispatchHook","useAppStore","createStoreHook","AppStore","AppContext","createGen3AppWithOwnStore","CookiesProvider","createAppApiForRTKQ","additionalReducers","appContext","appCreateApi","buildCreateApi","coreModule","reactHooksModule","hooks","useStore","appRTKQApi","appMiddleware","appStore","appApi","graphQLWithTags","graphQLAPI","graphQL","graphQLParams","useGraphQLQuery","guppyDownloadApi","downloadFromGuppy","cache","useDownloadFromGuppyQuery","useLazyDownloadFromGuppyQuery","manifestTags","manifestApi","getManifestServiceStatus","getFileManifest","getFileFromManifest","addFileManifest","manifest","filename","getCohortManifest","addCohortManifest","getMetadataManifest","getMetadataFromManifest","addMetadataManifest","useGetManifestServiceStatusQuery","useLazyGetManifestServiceStatusQuery","useGetFileManifestQuery","useGetCohortManifestQuery","useGetMetadataManifestQuery","useGetFileFromManifestQuery","useGetMetadataFromManifestQuery","useAddCohortManifestMutation","useAddFileManifestMutation","useAddMetadataManifestMutation","HasEnoughData","limit","numEmptyKeys","metadataApi","getAggMDS","pageSize","objValues","firstValue","studyField","hits","pagination","getIndexAggMDS","dataFromIndexes","indexKeys","objIds","filterEmpty","gen3MDSGUID","getMDS","guidType","getTags","getData","getMetadataById","getCrosswalkData","_queryApi","_extraOptions","fetchWithBQ","queryMultiple","queue","Queue","concurrency","callback","toData","toPaths","dataPath","reject","start","err","useGetAggMDSQuery","useGetMDSQuery","useGetTagsQuery","useGetDataQuery","useGetMetadataByIdQuery","useGetCrosswalkDataQuery","useLazyGetCrosswalkDataQuery","useGetIndexAggMDSQuery","queryMultipleMDSRecords","guids","useAggMDS","MissingServiceConfigurationError","serviceName","defaultLogger","DefaultRemoteSupportAction","RemoteSupportServiceRegistry","logger","services","registerService","getSupportService","service","hasService","getRegisteredServices","unregisterService","defaultRegistryInstance","getRemoteSupportServiceRegistry","ZENDESK_MAX_SUBJECT_LENGTH","ZENDESK_DOMAIN","NEXT_PUBLIC_GEN3_ZENDESK_API","createZendeskTicket","subject","fullName","email","contents","configuration","zendeskSubdomainName","zendeskTicketCreationURL","ticketSubject","substring","comment","requester","registerDefaultRemoteSupport","registry","convertToQueryString","queryParts","policy_ids","encodeURIComponent","resource_ids","revoke","requestorApi","strParams","userRequest","requestById","requestId","createRequest","useCreateRequestMutation","useRequestQuery","useLazyRequestQuery","useStatusQuery","useRequestorStatusQuery","useRequestByIdQuery","useUserRequestQuery","loadingStatusApi","getSowerJobList","submitSowerJob","getSowerJobStatus","uid","getSowerOutput","getSowerServiceStatus","useGetSowerJobListQuery","useLazyGetSowerJobListQuery","useSubmitSowerJobMutation","useGetSowerJobStatusQuery","useGetSowerOutputQuery","useGetSowerServiceStatusQuery","resourcePathFromProjectID","projectID","program","project","resourcePath","isRootUrl","urlFragment","isProgramUrl","userHasSheepdogProgramAdmin","userAuthMapping","userHasSheepdogProjectAdmin","projectCodeFromResourcePath","listifyMethodsFromMapping","accumulator","currval","userHasDataUpload","actionIsFileUpload","userHasMethodForServiceOnResource","userHasMethodForServiceOnProject","userHasMethodOnAnyProject","actionHasMethod","actionArrays","hasMethod","userHasCreateOrUpdateOnAnyProject","SubmissionGraphqlQuery","submissionApi","getProjects","projects","getSubmissions","transactionList","getProjectsDetails","projectsResponse","projectQuery","projectIds","project_id","projectDetails","projectId","projectDetailsQuery","mapping","details","code","getSubmissionGraphQL","getDictionary","useGetProjectsQuery","useGetSubmissionGraphQLQuery","useGetProjectsDetailsQuery","useLazyGetProjectsQuery","useLazyGetSubmissionGraphQLQuery","useGetSubmissionsQuery","useGetDictionaryQuery","WorkspaceWithTags","EmptyWorkspaceStatusResponse","conditions","containerStates","idleTimeLimit","lastActivityTime","workspaceType","workspacesApi","getWorkspaceOptions","workspace","memoryLimit","cpuLimit","getWorkspacePayModels","currentPayModel","current_pay_model","allPayModels","all_pay_models","noPayModel","getActivePayModel","setCurrentPayModel","getWorkspaceStatus","_arg0","queryApi","currentWorkspaceStatus","workspaceStatus","workspaceStatusData","Running","proxyStatus","statusError","originalStatus","Launching","False","launchWorkspace","responseHandler","terminateWorkspace","useGetWorkspaceOptionsQuery","useGetWorkspacePayModelsQuery","useGetWorkspaceStatusQuery","useGetActivePayModelQuery","useSetCurrentPayModelMutation","useLaunchWorkspaceMutation","useTerminateWorkspaceMutation","workspaceStatusSelector","selectWorkspaceStatusFromService","selectWorkspaceStatus","paymodelStatusSelector","selectPaymodelStatus","isWorkspaceActive","Terminating","isWorkspaceRunningOrStopping","ConfigRegistry","init","freeze","configRegistry"],"mappings":"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"}